发新话题
打印

请教在Linux上用C编写名片程序(象PDA的界面)遇到的问题???!

你好!

很感谢你的回帖,很详细!2 w) v$ F, v1 U( i) T. z
  因为我存储的时候要考虑查询,所以顺序结构很不方便!还有如果事先初始化的话,在存不定长的记录时可能很浪费!
: u7 ]1 E! k2 S; l- }; O: g  请问你的int index; //索引 是什么索引?能否在文件头放一个记录各结构体地址的索引表(怎么建?)' W+ y! ], {, P; X
  谢谢!请指教!
/ t, S8 P: b" j) K- X      

TOP

不会啊。因为每个资料段的长度都是由你自己来定义的吗。2 `$ {+ P; R4 z0 o
如果要查询的话,比如你要查询用户名为abc的资料。你可以从第一位的资料开始读起,读取相应的用户名,经判断,如果不是,则根据( W" N) P3 z6 u% O; I( s2 C7 K
int NameCardLen;//整个Namecard的长度,包括name,addr等。 1 ^* ]  r7 ~5 A8 t5 K) A7 w2 _- |
(还可以加入一个本用户资料段的文件偏依位置的变量)0 ^0 o1 M  h7 u' c" L/ D+ M
将文件指针来移到下一位用户资料的位置,再去判断是否需要查找的用户。
: U/ y$ {+ W0 J
5 @) J4 d/ r( g/ K6 }* N4 y9 m另外,如果你需要查询的话,建议你先把数据先读到内存的链表中,这样可以提高查询的效率。* J* {! i2 ]0 `/ {. o% M" a9 m

" ~9 w3 C! o5 l% l如果你需要建立一个索引表的话,可以参考fat表的结构,但是这样的话,你的整个文件的最大值就要确定了。      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

我也来感谢

怎样记录每个记录在tree中的位置?  [- c- X" K: P/ I
fat的资料在哪里?* y6 o! c' h. c. A& b$ D
+ @' M+ i! X" p' U9 Q
你怎么知道这些知识的?看了那些资料,可以介绍一下吗?2 D7 {, F) Q" g. M6 W* R( K* {% n" _
9 u! z$ A, f+ Q" T$ n* }5 g
& P  a/ E3 u6 h$ t6 j
      
forlinux@263.net forlinux.yeah.net

TOP

sorry!

你好!
$ f6 V7 I8 v* c$ o6 l' I    我现在把我的程序大致写一下,请帮修改!
2 v5 q6 Y6 K- f$ w0 Q$ U! B! lstruct Card{, M7 Q0 a& N, R
name[20];company[20];........+ R7 k- O+ D/ c4 w* m3 z* O
           }mingpian;0 h0 ~1 o, y& X
struct mingpian[600]; . ^3 ]# w" ]8 x6 B  a1 F
for (i=0;i<600;i++)
: ^8 {/ U7 r9 Z; [2 _3 Z6 {6 `{}   //将含600个名片记录的文件初始化(?是必须的吗)& B8 C, e* [9 m! p& j
File *cfPtr;) O, Y% [  C, i
文件保存:
6 `/ X' T7 T6 W“a+"方式;
* {( i8 z3 [! S# z. a. kfwrite(&mingpian,sizeof(struct Card),1,cfPtr);' r$ s/ {9 O4 A, E8 |

4 X1 j! N. y, c, V我想问的问题是:5 K0 M, L6 r: [1 B1 @' ~: B
1。 我定义的名片结构体中如:name[20],可能20没全用,我保存时结构体的长度是实际长度,还是预定义的长度?能变长吗?, {/ u4 h+ N' A$ _1 X- V
2。 我在保存是能进行排序吗(安拼音)? 怎么排?
9 P" c. U( ~3 w* c      

TOP

快回答我的问题呀

我先回答你的7 `1 `7 i9 A% ^! `
其实name没必要省,要省的话就在前面加个int记下name的长度/ m; F% t& @. L# w8 |6 z! ~9 M. S
文件内不排序,读出后在内存中再排序..存盘时再优化.因为排序方式
7 u6 D9 o6 |2 t7 F  b; r% r/ j是会变的
! z  \5 Z' g9 ?- I% a      
forlinux@263.net forlinux.yeah.net

TOP

怎么处理?

文件内不排序,读出后在内存中再排序..存盘时再优化.要怎么处理?
5 w; M5 X7 g, Q" {' k1 {, X- O% J我很想建一索引表,就是指出下一记录的位置和长度,应怎么办?      

TOP

..

排序是基本的算法....
: z9 {1 n: Y2 e. v' dglib的glist有相关函数..你找些源码看吧0 a! R: _7 G6 x# n  a
9 `9 V5 b' Q( n# d$ Q& i% V4 z. p
用一个int记下后面的记录长度,再seek到后面去.
- _% s- f' t+ l  T8 E& k& z6 h6 n! n# A- R* R: E4 s
斑竹还是要帮忙呀      
forlinux@263.net forlinux.yeah.net

TOP

版主外出云游了,地点长江三峡,昨天收到DARKSPY消息,正玩的譬颠皮颠的。      
this message will self-destruct in 5 seconds......
我们的目标--------消灭蛀.....................零回复

TOP

呵呵,逃不过的

回来接着问      
forlinux@263.net forlinux.yeah.net

TOP

我前面不是说了吗,% V: B- ~( h4 a% {8 W7 P
你可以在每一个数据段中,把当前的数据段的长度也作为一个字段保存进去,且作为第一个字段。这样你就可以知道这个值作为偏依量去读下一个数据段。
; D& n+ ^" c! j' Z      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

发新话题