36 1234
发新话题
打印

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

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

TOP

先保存在数组,然后确认了后,存在文件中。3 d- ?% E6 \) t* R2 X- e
结构要你自己定义。! \$ P% C& h1 W- t* N, R8 `

  t; ^7 y3 k& p' @: h1 u3 n你可以看看压缩工具的源代码。      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

然后呢?

你好:7 Z6 k4 Q; O7 F* x( r+ l
   我在做的时候,已定义了一个结构体,现在的问题是我如何将它存入文件,并安拼音排序,以及方便进一步的查询及添删操作!
2 @3 P) e6 Z+ ^1 z1 s% A8 i   请指教!      

TOP

还有

是不是先要用一程序初始化建一个可存放 n 条结构体记录的文件?4 ]' e  u) J5 M, _2 O! C
如果每条记录不定长呢?" @6 v9 @8 ]3 l: o, S" F4 I
如要在文件前建一索引的化,怎么建?
* B$ G( t. ]7 n' z6 w谢谢!      

TOP

typedef unsigned char byte;+ c0 y( M7 M# w- C: g8 }) j
9 m( P; U7 d  S7 g% U
struct NameCard. C. x, q5 z" O% O3 z
{  N. g3 A' C0 O
  int  index;
! V5 c$ ?+ b( \$ l' }$ |. C  byte *name;
8 |0 t7 J  T( F1 M7 S* L  NameCard *next;
/ Y; @! c9 [; i& `  K2 r  .....
" Q' f/ p. C# v" b7 z8 m- q }*NameCard_Point;6 F6 P+ f% t0 y& O, ~, P& b7 O
8 `& Z' e8 w8 s, k5 A
然后比较一下 name 字母顺序就可以排列,然后排列好就可以存入文件。
9 t, L% U6 z. o# Y! [9 t0 _$ m# x, c/ b* e
如果这样做,数据大的话效率会很低,速度很慢,建议还是用链表比较好。
3 s4 j+ q  i, Q1 R& k
5 h* n9 Z" t' Y+ n- K8 ^$ r, S我去三峡,所以没有时间回答你后面的帖子,请BlueSky代回答。谢谢了,BS我回来请你吃糖糖。      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

还有。。。

typedef unsigned char byte; $ R$ c# b5 l! K
struct NameCard   ]3 o1 G: }2 M' L/ Z/ @
{
( p) |4 M/ e) T  A/ F, q2 ?int index;
+ W) t0 H8 o  X5 ~( T- hbyte *name;
* b8 F  W6 W5 H/ HNameCard *next;
' B9 [8 {6 N4 E6 {..... 7 n- O8 v! a/ `: T3 G! s& c+ V$ p
}*NameCard_Point; 6 W4 G9 `6 u. V8 _9 Z
中 NameCard *next 是下一条名片记录?能这样定义吗?*NameCard_Point的*是什么意思?
* K1 M3 I0 H; k) o8 G具体的链表怎么建?3 ~: j, y3 G& T/ Z
有例子吗?
( d3 W, _- A  |3 {      

TOP

email: sanmzhou@163.com

email: sanmzhou@163.com      

TOP

这问题我也想弄清楚

http://www.mycnknow.com
# r2 v4 j4 F1 l/ T/ i有个列子...我看不懂......
/ ]$ h: q) ]5 w4 P" u* o高手介绍点资料呀!      
forlinux@263.net forlinux.yeah.net

TOP

typedef unsigned char byte; + j. U+ u0 Q  |6 h& u+ Q
struct NameCard + V* P( Z. h6 d$ Y4 h! ^5 @
{
# Z5 a. I- M5 m$ I, F  a' D) \& Dint index; * r9 Q; J& u/ P" x; a% \' ?
byte *name;
$ _" V) M: h, O) `NameCard *next;
1 r/ O- d8 L& r; {8 ]# u4 R.....
- D& I. T( {7 W5 q}*NameCard_Point;
- `$ n1 y( X  C+ ?$ J6 L5 ENameCard *next是一个结构指针,你可以用它来保存下一个结构的指针(在内存中。)
3 G1 u, o8 X& r( \! O! o: O( @7 D+ j3 V; ]: a
当然,如果你要保存在文件中,那么这个变量可以不要。1 j5 r& e, j6 S! o
如果你要保存到文件中,那么你可以用下面的结构。
  R  g) F6 _1 Rstruct NameCardf " D$ j' [$ R, o6 }+ Y
{
. G( Z2 p/ h' Z- Vint NameCardLen;//整个Namecard的长度,包括name,addr等。5 q6 }& _0 i4 ^. Z- H1 r7 y
bool delete;//是否已经被删除8 F3 i" a& p- v# H. A
int index; //索引( n1 S, d# n' }7 d3 X
int namelen;//用户名的长度。
" S! E# R" y, \, Rint addrlen;//地址资料的长度。' u9 a1 l; P) ]' g+ s
.....
$ |* {* t- _* A/ K% D  Z# q}; ! C0 W3 a# n% u! \6 y! n; r$ C& d1 H
8 A9 m: Z( `9 S/ U
你先把这个结构存入文件。) A$ a/ K6 O1 F$ g% [# q0 x
然后写入namelen长度的用户名。$ d2 c& j/ ?# K: ~3 D( G! t2 \
再写入addrlen长度的用户地址资料。
5 O) S) }0 a! [7 Y, P0 w2 Y& ~....( N6 B2 \% y% f- a
当然读出资料的时候也要按顺序来读。
4 N! u9 K( p8 I  d/ _9 J8 M$ z5 W# M3 d/ V
如果要添加一个用户资料。就在文件尾部添加。
2 z+ G& @$ ]/ P  [如果要删除一个用户资料,就把delete标志写为true就可以了。
! B, m; F" P: ^8 k5 S3 k
: _. q' \% M6 `# {3 x% i% Z  U当然在多次删除操作以后,文件内部会出现很多空余的地方。
1 B7 F% q! x( W你可以在写一个压缩功能,类试outlook一样。1 R. V: c) t2 g1 z' M& S* o
把所有的有效数据读出来,再写一边就可以了。
  o. g* G, z. i2 L7 F      
[img]http://www.linuxeden.com/dog.gif[/img] ! 有那么严重么!!!

TOP

谢谢,我搞懂了

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

TOP

 36 1234
发新话题