最新C语言程序设计——学生信息管理系统.doc
《最新C语言程序设计——学生信息管理系统.doc》由会员分享,可在线阅读,更多相关《最新C语言程序设计——学生信息管理系统.doc(129页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言程序设计学生信息管理系统C语言程序设计学生信息管理系统 C语言课程设计姓 名: 徐宗博 学 号: * 班 级: 061092 指导教师: 曹老师 2011 年 6 月 25 日 目录第一章:实习内容 1.1实习内容简介(2) 1.2程序代号说明(3)第二章:程序流程图第三章:函数模块介绍 3.1读取文件、存储文件(6)3.2 管理系统模块(8)3.3 恢复区系统
2、模块(12)3.4 功能展示(12)第四章:实习总结(16)第五章:实习体会(17)附录:参考文献(19)源代码(19)第一章:实习内容1.1实习内容简介题目:学生通讯录管理系统要求:1.可实现信息的添加、删除,可按学号、姓名查询; 2.学生信息必须包含学号、姓名、学院、专业、籍贯。地址、电话号码; 3.必须有注释。日期:2011年6月20日至27日,共8个半天。地点:信息楼301指导老师:曹雪莲完成情况:1. 程序可完成信息的添加,可按学号、姓名分别查询;2. 程序可按姓名、学号分别删除,并在删除前显示删除学生的全部信息;按姓名删除,若出现同名情况,会依次出现系统提示是否删除,可选择删除或跳
3、过;3. 在程序文件夹中有一“学生信息库”的txt文件,可查看学生系统里全部学生信息;4. 设置有一个恢复区系统,可输出、查询删除的信息,并在可同文件夹中“删除信息库”的txt文件中查看删除信息;总体结构如下:1.2程序代号说明代号说明结构体student结构体stu全局变量num学号inf学生信息,包含左结构体student全部信息n链表节点数量name姓名next本类型结构体指针rhead恢复区链表头指针academy学院searchnum目标个数major专业province省份address地址phone电话号码函数add增加delet删除(按姓名或学号)search查找search_
4、num搜索学号search_name搜索姓名print输出链表上信息print1输出链表上单个节点的信息save以二进制格式储存数据txtsave以文本格式储存数据crete从二进制文件中读取信息,建立链表deletinput将删除信息导入恢复区链表system管理系统主要程序recover恢复区系统主要程序此外,局部变量的含义比较固定:head链表头指针,若与rhead一同出现则代表管理系统链表头指针select、input为选择的值filename文件名第二章:程序流程图程序流程图: 本次实习我的思路就是,先从二进制文件中读取信息,形成链表,对链表进行基本操作,如输出、添加、删除、查找。程
5、序结束时将链表保存在二进制文件和文本文件中。管理系统流程图:运行管理系统部分时,先从文件“information.xls”中读取数据(若无该文件则创建文件),构建链表;后续操作都是对于链表进行操作,如添加、查找、删除、输出等;离开该部分时则保存链表里的信息到已存在的“information.xls”,并以ASCII形式存储至“学生信息库.txt”,方便检查。恢复区系统流程图:恢复区系统思路与管理系统思路类似,连函数调用都是一样的,二进制文件名为“dinformation.xls”,文本文件名为“删除信息库.txt”。具体函数模块功能将在第三章中具体介绍。第三章:函数模块介绍程序分为管理系统和恢
6、复区系统两部分和读取文件、存储文件四部分,以下分别介绍。3.1读取文件、存储文件读取文件该函数模块(程序名为creat)于管理系统或恢复区系统运行前运行,目的是读取二进制文件信息,构建链表;若无目标文件,则创建文件。返回值为头指针。函数主体为:struct stu *p1,*p2;struct stu *head;while(fread(&(p1-inf),LEN,1,fp)/读取数据 n=n+1;/若读取数据成功节点数加一 if(n=1) head=p1;/给头结点赋值 else p2-next=p1;/加新的结构体 p2=p1; p1=(struct stu *)malloc(LENS);
7、 fclose(fp); p2-next=NULL;/尾结点处指针置0 return(head);存储文件 该函数模块分为两部分,以二进制形式存储链表信息(程序名为save)和以文本形式存储(程序名为txtsave)。二进制形式文件是为了读取文件,优点是快速;文本文件是为了方便检查,优点是明确可见。无返回值。二进制形式存储程序为:void save(struct stu *head,char filename20)/存储链表信息 FILE *fp; struct stu *p; p=head; fp=fopen(filename,wb);/以二进制方式打开文件 while(p!=NULL)&f
8、write(&(p-inf),LEN,1,fp)/写入文件 p=p-next; fclose(fp);/其中head为链表头指针,filename为存储文件名,在主函数中已有定义。 存储在文本文件程序为:void txtsave(struct stu *head,char filename20)/以文本形式将链表输入文件FILE *fp;struct stu *p;p=head;fp=fopen(filename,w);/以文本形式打开 while(p!=NULL)/链表不到尽头不停止 fprintf(fp,%ld,(p-inf).num);/向文本文件中写入数据 fprintf(fp,%10
9、s,(p-inf).name); fprintf(fp,%10s,(p-inf).academy); fprintf(fp,%10s,(p-inf).majoy); fprintf(fp,%10s,(p-inf).province); fprintf(fp,%10s,(p-inf).address); fprintf(fp,%20sn,(p-inf).phone);p=p-next;3.2管理系统模块 管理系统(名为system)主要有四个函数功能部分,分别为添加、删除、查找、输出,以下依次介绍:添加该模块函数名为add,无返回值,参数为链表头指针,功能为向已建立的链表中从键盘上输入信息。函数
10、主体为:struct stu *p1,*p2;/建立结构体指针p2=head;p1=(struct stu *)malloc(LENS);/输入信息printf(n学号(输入数值请小于32756):);scanf(%d,&(p1-inf).num);printf(n姓名:);scanf(%s,(p1-inf).name);printf(n学院:);scanf(%s,(p1-inf).academy);printf(n专业:);scanf(%s,(p1-inf).majoy);printf(n省份:);scanf(%s,(p1-inf).province); printf(n地址:);scanf
11、(%s,(p1-inf).address);printf(n电话号码:);scanf(%s,(p1-inf).phone); while(p2-next)!=NULL)/移动指针到链表尾 p2=p2-next; p2-next=p1; /移动指针 p2=p1; p2-next=NULL;删除函数名为delet,返回值为指向结构体的链表头指针,参数为链表头指针,可按姓名和学号删除。若按姓名删除时,为防止同名情况,则查询到一个目标,就显示出信息,并提示是否删除。1.按学号查找的函数主体为:printf(请输入拟删除学生学号:n); long snum=0;scanf(%ld,&snum);stru
12、ct stu *p1,*p2;p1=head;while(snum!=p1-inf.num&p1-next!=NULL)/p1指向的学号不是要找的节点,并且后面还有节点 p2=p1;p1=p1-next;/p1后移if(snum=p1-inf.num)/找到目标print1(p1);deletinput(p1);/print1()为输出相应指针指向的节点信息deletinput()为向恢复区系统链表输入信息的函数,在后续3.3中会提及if(p1=head) head=p1-next;/若p1指向头节点,将第二个节点位置赋予headelse p2-next=p1-next;/否则将下一结点位置赋
13、给前一节点位置n-;else printf(该学生不存在);return(head); 2.按姓名查找(包含同名情况):int select=0,count=0;/selet选择删除与否,count代表删除次数char sname20;/定义要搜的名字struct stu *p1,*p2;p1=head,p2=head;printf(请输入学生姓名:n);scanf(%s,sname);/输入学号while(p1!=NULL)/历遍链表 if(strcmp(sname,p1-inf.name)=0) /与目标名字是否一致,相同为0print1(p1);/若符合姓名条件,显示信息 printf(
14、删除该生信息?n删除选1n按其它键不删除n);/保证达到目标姓名时显示学生信息,可选择不删除scanf(%d,&select);if(select!=1) p2=p1;p1=p1-next;continue;/不删除就再次循环else n-; deletinput(p1); count+;/删除数加一 if(p1=head) head=p1-next;/删除信息 else p2-next=p1-next;/更改指针,绕过目标 p2=p1;p1=p1-next; if(count=0) printf(该生信息不存在);/若未删除则视为未发现目标学生 return(head);查找函数名为sear
15、ch,参数为链表头指针,无返回值。其中查找可按姓名与学号进行查找,若找到目标即出现在屏幕;若出现同名情况,则依次显示。查找与删除函数语句类似,但是删除要求目标的前一个节点的指针与目标节点的指针都能知道;而查找要求则低多了。因为这个原因,在加上我是先写的查找,所以删除中未调用查找函数。按学号查找函数主体如下:long snum;/定义要查询学号变量printf(请输入学号:n);scanf(%ld,&snum);/输入学号while(p!=NULL)/历遍链表p=search_num(p,snum);/此为调用函数,效果是查找到与目标相同的信息然后返回相应指针if(p!=NULL) print1
16、(p);/若查找到目标,输出else break; p=p-next;/传递指针,继续 按姓名查找函数主体如下:char sname20;/定义要查询姓名的变量printf(请输入姓名:n);scanf(%s,sname);/输入姓名 while(p!=NULL)p=search_name(p,sname);/与上文中search_num类似,返回同名目标的指针if(p!=NULL) print1(p);/若查找到目标,输出else break; p=p-next;/传递指针输出函数名为print,参数为链表头指针head,无返回值。函数作用就是沿链表依次输出学生信息。函数主体为:printf
17、(全体学生数据如下:n);if(n=0) printf(无学生信息);return;/若节点为0则返回struct stu *p;p=head;while(p!=NULL)/循环输出printf(n学号 %d,(p-inf).num);printf(n姓名 %s,(p-inf).name);printf(n学院 %s,(p-inf).academy);printf(n专业 %s,(p-inf).majoy); printf(n省份 %s,(p-inf).province); printf(n地址 %s,(p-inf).address); printf(n电话号码 %sn,(p-inf).pho
18、ne);p=p-next;3.3恢复区系统模块恢复区系统(其名为recover)是为了显示被删除信息而建立的,在函数运行之初便建立了恢复区链表,头指针设为rhead,与管理系统头指针head相区别。并且,rhead被设为全局变量,方便被函数调用。恢复区系统主要有查找、输出功能,其功能模块基本调用管理系统的函数,所以不再赘述。而恢复区的输入函数,即管理区删除信息时将信息输入恢复区链表的函数,上文已提及,即deletinput,此为连接恢复区与管理系统的桥梁,只不过是单行的。函数为:void deletinput(struct stu *p)/将删除信息导入恢复区链表,p为要删除信息的指针stru
19、ct stu *p1,*p2;p1=rhead;/恢复区链表头节点位置while(p1-next!=NULL)/指针置于链表尾端p1=p1-next;p2=p1;p1=(struct stu *)malloc(LENS);/复制结构体信息p1-inf.num=p-inf.num;strcpy(p1-inf.name,p-inf.name); strcpy(p1-inf.academy,p-inf.academy);/复制字符数组,以下类似strcpy(p1-inf.majoy,p-inf.majoy);strcpy(p1-inf.province,p-inf.province); strcpy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 语言程序设计 学生 信息管理 系统
限制150内