发新话题
打印

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

你好!

很感谢你的回帖,很详细!8 ?# M1 p2 r8 l, F( B6 I# E3 `
  因为我存储的时候要考虑查询,所以顺序结构很不方便!还有如果事先初始化的话,在存不定长的记录时可能很浪费!3 d' H% C& S. Q7 B5 ~2 Q
  请问你的int index; //索引 是什么索引?能否在文件头放一个记录各结构体地址的索引表(怎么建?)- O9 P8 n. ~; u- A
  谢谢!请指教!
- }( B1 ], u1 A8 h' O' n7 w3 y" Y5 C5 p' G      

TOP

不会啊。因为每个资料段的长度都是由你自己来定义的吗。
& ~# C/ N) F" v如果要查询的话,比如你要查询用户名为abc的资料。你可以从第一位的资料开始读起,读取相应的用户名,经判断,如果不是,则根据
$ o5 R$ Z% s/ k# d- d- Pint NameCardLen;//整个Namecard的长度,包括name,addr等。 9 H  g* }% d7 D( j, W* Y
(还可以加入一个本用户资料段的文件偏依位置的变量)
# g% E) V. m$ `' A' u( S; V将文件指针来移到下一位用户资料的位置,再去判断是否需要查找的用户。
, E! b/ H5 X/ J* s7 P+ U' a! P6 F7 X7 m% w
另外,如果你需要查询的话,建议你先把数据先读到内存的链表中,这样可以提高查询的效率。
/ N# P5 L! V/ D% H5 t* p* r
2 e( O  ~- P: g8 o# k+ r如果你需要建立一个索引表的话,可以参考fat表的结构,但是这样的话,你的整个文件的最大值就要确定了。      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

我也来感谢

怎样记录每个记录在tree中的位置?, q! M: Q- l6 K/ T2 D
fat的资料在哪里?& w( w+ u: g( C

1 w# |! l0 i3 }* s' |5 P8 o* W你怎么知道这些知识的?看了那些资料,可以介绍一下吗?8 i2 ]+ M4 ~# D6 L! h

5 j' Q8 t( f- o" M, p% j8 y0 t
* y* c5 E) G1 ~" c; K2 F! K* ?      
forlinux@263.net forlinux.yeah.net

TOP

sorry!

你好!5 z- C$ Y( |# g) j$ K0 z9 ?
    我现在把我的程序大致写一下,请帮修改!
* u! p- x7 Z; Q1 [struct Card{
; X7 `) G' C- W  K4 Uname[20];company[20];........, ^- r/ y  d& V8 q
           }mingpian;' m' R% v" `" A; v- h
struct mingpian[600]; & e% ^6 {. C" \. _( B
for (i=0;i<600;i++)& n/ f% b6 V, n/ Y( O
{}   //将含600个名片记录的文件初始化(?是必须的吗)' c& [! V6 L- y& L% v" s
File *cfPtr;3 ?9 y% F) K" P! u- l/ p6 d9 o. l
文件保存:
' |( w3 X% q6 Z. R+ i0 l“a+"方式;2 n5 C- {1 ~# u% f# T
fwrite(&mingpian,sizeof(struct Card),1,cfPtr);8 L- E$ h; C4 n; K! t
+ d& B0 |! T/ w0 [$ ?
我想问的问题是:. c' I3 Q% R" I% ?: v! |  Y$ h
1。 我定义的名片结构体中如:name[20],可能20没全用,我保存时结构体的长度是实际长度,还是预定义的长度?能变长吗?
/ J2 g! j+ Q) p5 j  `+ } 2。 我在保存是能进行排序吗(安拼音)? 怎么排?1 e5 G% R3 E1 a, R3 T3 s
      

TOP

快回答我的问题呀

我先回答你的4 D, Y6 E3 f: ^3 V: j! U* J0 ~
其实name没必要省,要省的话就在前面加个int记下name的长度# i& U5 J1 ?1 H1 T! s
文件内不排序,读出后在内存中再排序..存盘时再优化.因为排序方式+ ?+ Y1 E8 f8 O$ c8 K7 k
是会变的; L+ q& b9 w5 f1 [- C/ c
      
forlinux@263.net forlinux.yeah.net

TOP

怎么处理?

文件内不排序,读出后在内存中再排序..存盘时再优化.要怎么处理?
$ p& f" n% @4 _5 _我很想建一索引表,就是指出下一记录的位置和长度,应怎么办?      

TOP

..

排序是基本的算法....5 w0 [. j& Q" f1 W2 @5 ~0 k! Q
glib的glist有相关函数..你找些源码看吧
/ w# e! I/ Y  V0 h8 o' Y" h% c7 u: n5 D; X  a6 q9 m
用一个int记下后面的记录长度,再seek到后面去.
1 k& f/ ^& ^  v, _% V. f2 d9 v
: O. _/ n2 o' U+ c! l斑竹还是要帮忙呀      
forlinux@263.net forlinux.yeah.net

TOP

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

TOP

呵呵,逃不过的

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

TOP

我前面不是说了吗,& ^' _# k4 W8 K  J' N
你可以在每一个数据段中,把当前的数据段的长度也作为一个字段保存进去,且作为第一个字段。这样你就可以知道这个值作为偏依量去读下一个数据段。
1 n) U! ~! W( B" _2 x' U      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

发新话题