36 1234
发新话题
打印

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

大虾们好:# i" o1 _1 h0 l4 `8 H- F
    小弟现在正在Linux上用C编写名片程序(象PDA的界面),现在的问题是,我定义的名片的结构体如何用文件来保存,以及保存后的查询,修改,添加和删除。应为我用的是界面形式(想windows的计算器的界面),如何把在界面上按键所得的东西,存到文件中???!      

TOP

先保存在数组,然后确认了后,存在文件中。( x9 k3 X, `" k; Z) D: ]
结构要你自己定义。
( B+ e; T4 K) X+ _" w. G& B' d: F) w6 H
你可以看看压缩工具的源代码。      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

然后呢?

你好:  ^2 d' |/ O, T; j  {. o
   我在做的时候,已定义了一个结构体,现在的问题是我如何将它存入文件,并安拼音排序,以及方便进一步的查询及添删操作!
" k2 K, X: d, {. [# ?3 a+ A   请指教!      

TOP

还有

是不是先要用一程序初始化建一个可存放 n 条结构体记录的文件?
% {: w8 y0 v( `( ^- e9 F如果每条记录不定长呢?# V! p* W" f, f- V* l- A
如要在文件前建一索引的化,怎么建?
3 N7 B4 ?1 c8 V谢谢!      

TOP

typedef unsigned char byte;/ w, o* L$ D3 N: x
: ^. Y1 l8 X+ B; p
struct NameCard( h! E9 C+ U- I  L7 ~% x9 Y
{) [$ I2 X/ i" j6 z  V
  int  index;
) |9 M& D( Z; C# ^  byte *name;
; C- z; O% @7 y# }" M# {' k  NameCard *next;' d" C  v3 [, p* C- [( i. ^9 n
  .....
* M, m! B8 }1 v8 s: `; D }*NameCard_Point;9 ?8 Y# y, `( h7 Q
3 Y. y( C& K  N9 x7 Z: ^
然后比较一下 name 字母顺序就可以排列,然后排列好就可以存入文件。" H% O7 Q# x6 ?" M
# G9 l- \/ v$ P9 d; N2 U
如果这样做,数据大的话效率会很低,速度很慢,建议还是用链表比较好。, \& K0 Y, D8 e+ M

+ g; ~: z# h# |# ]. S6 `我去三峡,所以没有时间回答你后面的帖子,请BlueSky代回答。谢谢了,BS我回来请你吃糖糖。      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

还有。。。

typedef unsigned char byte; 9 [0 n) g6 U( i7 Z: O: G* k! B" C
struct NameCard
! R" `3 i( Y' k) t6 ~{ ' ]0 w) k. C7 t- @" u: u3 |6 k' s
int index;
' }/ ^/ S: Z" Y( Ybyte *name; 7 k& }/ E, H& B! a2 b4 r  o
NameCard *next; 7 w; e% }2 n6 W. Z- V$ _
.....
+ n5 X* H& l9 N, c: N4 _. }}*NameCard_Point;
' u3 K. p7 B& ^. I8 Q" n0 ]* T中 NameCard *next 是下一条名片记录?能这样定义吗?*NameCard_Point的*是什么意思?6 u/ l; ?2 e$ I' X
具体的链表怎么建?( E" T( S0 B: `- R' t* Q
有例子吗?
/ v2 v) L" ?; |: e      

TOP

email: sanmzhou@163.com

email: sanmzhou@163.com      

TOP

这问题我也想弄清楚

http://www.mycnknow.com* O( Q% _# k- D3 L* H5 ^
有个列子...我看不懂......  ?1 M- @" E7 T$ q3 B4 x
高手介绍点资料呀!      
forlinux@263.net forlinux.yeah.net

TOP

typedef unsigned char byte; 9 @/ P( m* L! y* R, {2 F
struct NameCard
: U, ~) o! u* s  p{
! m$ y( l; ~0 M5 v' I& E* rint index;
6 i: K% Y% U4 u6 b) ybyte *name;
/ M* ^7 E0 l) m. @' }NameCard *next; 5 d2 ?8 C7 ~. U! {
..... ' F, u! v- T' }" p/ W" g
}*NameCard_Point; 8 v) Y* k) c+ L: n+ w0 Q
NameCard *next是一个结构指针,你可以用它来保存下一个结构的指针(在内存中。)
' N9 I* L. A3 A* i( B2 [- E, A" h4 j( @0 l: Q5 W/ }, r) X- N
当然,如果你要保存在文件中,那么这个变量可以不要。' i4 T/ x( l& w  {1 I4 U
如果你要保存到文件中,那么你可以用下面的结构。
$ k* V# E2 }/ ~3 m( D$ q8 e6 I2 xstruct NameCardf - ^8 B7 n  C9 k1 f8 p1 Q6 e! c+ m
{
. B3 i$ v7 Y& ^% `* L% _int NameCardLen;//整个Namecard的长度,包括name,addr等。
+ f- u# Q/ U1 X- }& nbool delete;//是否已经被删除3 a& y% G- g/ a
int index; //索引
% [- I7 }9 v5 ^) c& y; m7 d6 K% @' ^int namelen;//用户名的长度。6 a# ^' }2 U% r- ~
int addrlen;//地址资料的长度。
! g. K" Y7 s; m: V; u) I..... # x. O4 V$ s- S* A0 M$ L3 Z
};
! k1 q- v( D3 o* k8 Q* j* v9 r( R6 S4 E/ N# Z: m) x# k
你先把这个结构存入文件。2 X% A1 n# u( r7 Q( }: [" {5 ^1 ~
然后写入namelen长度的用户名。
" N  ]! z4 v. r+ s5 X& J: F再写入addrlen长度的用户地址资料。, w1 r" p" V- \
....
) P1 b5 T$ Q: B- n3 {6 C' m# m当然读出资料的时候也要按顺序来读。* z# i2 S. K5 g$ Y
+ M+ a- |5 c; x3 N, a8 v- s
如果要添加一个用户资料。就在文件尾部添加。
, b  H2 p- m0 ?4 x* }8 i如果要删除一个用户资料,就把delete标志写为true就可以了。
8 r9 r# F( Z8 j9 `$ ?4 K) u4 l1 Y5 A5 t2 _0 K
当然在多次删除操作以后,文件内部会出现很多空余的地方。
4 s$ H9 N6 T  H3 ^/ E/ y. o你可以在写一个压缩功能,类试outlook一样。& J, A( y6 {: A3 V6 U  r
把所有的有效数据读出来,再写一边就可以了。
% ~& B" f# ], P* R. N- k3 h6 b      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

谢谢,我搞懂了

以前就是不知有delete标记      
forlinux@263.net forlinux.yeah.net

TOP

 36 1234
发新话题