学了C#里的委托发现C里边的指针更有意思
最近一段事件在学习C#里边委托 事件 多线程 等东西,以前对委托只停留在扫盲阶段。只知道 委托就是把方法当参数传递进去。相当于C、C++的指针函数,于是就花了点事件看了下更多的例子,恰巧的是居然找到了几年前在学校里边写的几段代码,( ⊙o⊙ )哇,居然是C里边的指针,\(^o^)/~ 仔细看了遍好多好像都不认识了 O(∩_∩)O~。
现在贴出来回顾下,对最近学C#委托做点帮助,╮(╯▽╰)╭ 现在终于知道面向对象的简单了
先说下吧 是一个 传说可以存放 学生信息的 东西,存放以文件格式形式放入指定文件夹(试了下还是可以运行的 Vs下 呵呵)
View Code
1 #include"stdio.h" /*调用输入输出函数的头文件*/
2 #include"stdlib.h"/*调用动态分配函数*/
3 #include"string.h" /*调用字符串函数*/
4
5 struct node /*学生管理系统包含内容*/
6 {char name[20];
7 char class[15];
8 char add[20];
9 char age[10];
10 char dgree[15];
11 };
12 typedef struct list /*双链表结点内容*/
13 { struct node student;
14 struct list *Llist,*Rlist; /*结点前驱,后继*/
15 }Dlist,*Plist;
16 Plist head; /*全局变量,双链表头结点*/
17
18 /*下面是建立双链表函数,尾插法*/
19 Plist enter()
20 {Plist p,q,h;
21 h=(Plist)malloc(sizeof(Dlist)); /*建立头结点*/
22 printf("请输入你要存入的信息结点:");
23 scanf("%s %s %s %s %s",h->student.name,h->student.class,h->student.add,h->student.age,h->student.dgree);
24 p=h;
25 do{ q=(Plist)malloc(sizeof(Dlist));
26 printf(" 请按信息点输入学生信息:");
27 scanf("%s %s %s %s %s",q->student.name,q->student.class,q->student.add,q->student.age,q->student.dgree);
28 p->Rlist=q;
29 q->Llist=p;
30 p=q;
31 }while(q->student.name[0]!='$');
32 q->Rlist=h;
33 h->Llist=q;
34 return h; /*返回指针值*/
35 }
36
37 /* 插入函数 */
38 insert (Plist h)
39 { Plist q,s;
40 q=h;
41 if(q->Llist==h)
42 printf("学生管理系统为空,无内容!\n");
43 else
44 do{ s=(Plist)malloc(sizeof(Dlist));
45 printf("请输入:%s %s %s %s %s \n", h->student.name,h->student.class,h->student.add,h->student.age,h->student.dgree);
46 scanf("%s%s%s%s%s",s->student.name,s->student.class,s->student.add,s->student.age,s->student.dgree);
47
48 s->Rlist=q->Rlist;
49 s->Llist=q;
50 q->Rlist->Llist=s;
51 q->Rlist=s;
52 /* s->Rlist=q; s->Llist->Llist=q->Llist;
53 q->Llist->Rlist=s; q->Llist=s; 结点前插入 */
54
55 }while(s->student.name[0]!='$');
56 }/* 结点后插入*/
57
58 /*删除结点函数*/
59 delete(Plist h)
60 {Plist q;int i=1;
61 char person[20],*p=person;
62 q=h;
63 printf("input delete %s:",h->student.name);
64 scanf("%s",p);
65 while(strcmp(q->student.name,p))
66 {if(q->Rlist==h)
67 { printf(" 对不起!!!你要删除的学生 %s 不存在!请查正后操作 \n\n",p);i=0;break;}
68 q=q->Rlist;
69 }
70 if(i){
71 /* q=q->Rlist; 此句加上导致删除有误 可以试 */
72 q->Llist->Rlist=q->Rlist;
73 q->Rlist->Llist=q->Llist;
74 free(q);
75 printf(" %s 已经从学生管理系统中删除!\n",p);
76 }
77 }
78
79
80 /*输出双链表的函数,由头至尾显示*/
81 void list(Plist h)
82 {Plist p;
83 p=h; /*指针指向头结点*/
84 if(p->Llist==h)
85 printf("学生管理系统为空,无可显示内容!\n");
86 else
87 {do
88 {printf(" %s %s %s %s %s\n",p->student.name,p->student.class,p->student.add,p->student.age,p->student.dgree);
89 p=p->Rlist;
90 }while(p->Rlist!=h); /*换成p!=h 将显示结束符号$*/
91 printf(" 以上就是学生系统中所有成员!\n\n");
92 }
93 }
94
95
96 /*查找函数*/
97 void search(Plist h)
98 { Plist q;
99 int i=1;
100 char person[20],*p=person;
101 q=h;
102 printf(" input search %s:",h->student.name);
103 scanf("%s",p);
104 while(strcmp(q->student.name,p))
105 {if(q->Rlist==h)
106 { printf(" 对不起错误! 你要查找的 学生 %s 不存在!\n\n",p);i=0;break;}
107 q=q->Rlist;
108 }
109 if(i)
110 printf(" 以下是 %s 的详细信息: \n %s是:%s,\n %s是:%s,\n %s是:%s,\n %s是:%s\n\n",p,h->student.class,q->student.class,h->student.add,q->student.add,h->student.age,q->student.age,h->student.dgree,q->student.dgree);
111 }
112 /*存盘函数*/
113 save(Plist h)
114 { Plist q=h;
115 FILE *fp;char file[20],*filename=file;
116 printf(" 请输入您要保存的文件名:");
117 scanf("%s",filename);
118 if((fp=fopen(filename,"a"))==NULL)
119 printf(" cann't open the %s file!\n",filename);
120 else
121 { do
122 { fprintf(fp,"%s %s %s %s %s\n",q->student.name,q->student.class,q->student.add,q->student.age,q->student.dgree);
123 q=q->Rlist;
124 }while(q->Rlist!=h) ;
125 }
126 fclose(fp);
127 printf(" your file saved!\n ");
128 }
129
130 /*显示磁盘文件*/
131 load() /*可以将c:\cai\c目录下文本文件显示*/
132 { FILE *fps;
133 char a;
134 char file[20],*filename=file;
135 printf(" 请输入您要打开的文件名:");
136 scanf("%s",filename);
137 if((fps=fopen(filename,"r"))==NULL) /*若不存在指定文件,返回系统*/
138 { printf(" cann't find the %s file!\n",filename);exit(0);}
139 fread(&a,sizeof(char),1,fps);
140 while(!feof(fps))
141 {printf ("%c",a);
142 fread(&a,sizeof(char),1,fps);
143 }
144 fclose(fps);
145 }
146
147 /* 主函数用来 进行所有操作*/
148
149 main()
150 {int cord,cmd=0; /*cord 用于控制case语句*/
151 Plist enter();
152 do {printf("\n 主菜单 \n");
153 printf(" 0 查看系统使用说明 \n");
154 printf(" 1 建立学生管理系统\n");
155 printf(" *建立管理系统时请以关键字建立.\n 如:姓名 班级 地址 年龄 学历 为关键字\n");
156 printf(" 2删除学生\n");
157 printf(" 3显示所有学生\n");
158 printf(" 4查找学生\n");
159 printf(" 5把学生管理系统存盘\n");
160 printf(" 6打开已存盘的学生管理系统\n");
161 printf(" 7添加系统信息\n");
162 printf(" 8退出本操作系统\n");
163 printf("--------------------------\n\n");
164 printf(" 你可以进行的操作是:0-8\n\n");
165 printf(" 你选择的操作是:");
166 scanf("%d",&cord);
167 switch(cord)
168 { case 0:{printf(" (1) 输入你要进行的操作序号\n");
169 printf(" (2) 建立时完毕以$ $ $ $ $ 结束\n");
170 printf(" (3) 注意五个$间有空格\n");
171 printf(" (4) 注意在删除和查找时要以关键字进行 @即建立时表头第一个结点信息\n");
172 printf(" (5) 请严格按本说明操作 谢谢合作\n");
173 printf(" (*) 本系统是由彪哥、寒鹏创建。\n 后由寒鹏再次修正\n\n");
174 }break;
175 case 1:{head=enter();
176 printf(" 学生管理系统建立完毕!请选择其它操作\n");
177 }break;
178 case 2: { delete(head);
179 printf(" 你要查看其他学生吗?");
180 printf(" 要请输入1,不要请输入0:\n");
181 scanf("%d",&cmd);
182 if (cmd)
183 {printf(" 其他学生如下:\n\n");
184 list(head); /*此句可用GO TO 语句替代(CASE 3) */
185 }
186 }break;
187 case 3: list(head);
188 break;
189 case 4: search(head);
190 break;
191 case 5: save(head);break;
192 case 6: load(); break;
193 case 7: insert (head); break;
194 case 8:exit(0);
195
196 } /*switch end*/
197 }while(cord<=8); /*do-while end*/
198 }/*main*/

浙公网安备 33010602011771号