学了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*/

posted @ 2011-09-26 23:23  寒@鹏  阅读(148)  评论(0)    收藏  举报