C语言课程设计学生信息管理系统_第1页
C语言课程设计学生信息管理系统_第2页
C语言课程设计学生信息管理系统_第3页
C语言课程设计学生信息管理系统_第4页
C语言课程设计学生信息管理系统_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言及数据结构与算法课程设计题 目:学生信息管理系统专 业:姓 名:学 号:同组其他学生(学号):2013年 月 日一、需求分析3二、总体设计4三、详细设计5四、调试与测试6五、测试结果7六、用户手册9七、附录9Word文档资料一、需求分析每年九月份都有大量新生来到学校报道,使学校管理学生工作量增大,为 此我们设计一学生信息管理系统,学生信息包括:学号,姓名,年龄,性别,出 生年月,地址一 E-mail等。使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能-输入(3)学生信息浏览功能-输出(4)查询、排序功能-一算法按学号查询、按姓名查询、学生信息的删除 与修改(可选项)二、

2、总体设计组成框图欢迎界面流程图结束录入浏览开始开始查询t指针P指向头结点修改&删除开始指针P指向头结点输入姓名或学号输入要删除或修 改的学号P=p->nextP指针的学号与、 t 姓名是否与输N入的相同?/'1 丫输出数据(结束JiP=p->nextP指针的学号t<r与输入的是否,受1 ,同 / 丫修改P的各项数据或将 p=p->nextI三、详细设计主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。(1) Record录入函数建立一个包含学生全部信息的结构体,申请空间,其指针为pO,存入学生各项对应的数据。(2) Insert插

3、入函数:按输入的数据存储在一个stu类型的指针里,若原来链表里没有元素,则将此作为第一个元素;若原来的链表里有元素,则将指向头结点指针存储的学号与头指针下一个的学号大小进行比较,小的在前大的在后,之后指向头结点处的指正后移,进行比较,直到尾结点为止。在进行比较的while函数,每比较一次,计算总人数的TOTAJNUM自加。(3) Display浏览函数:将传给D i sp 1 ay函数的指针P所指向的结构体的各项数据输出以便核对信息。(4) DisplayAll 浏览函数:指针指向链表头结点,在i f语句中嵌套do-wh i 1 e语句将学生信息按学号从大到 小进行逐一输出。(5) Query

4、查询函数:首先使用switch语句生成菜单,实现操作选择功能。分三个部分按学号查询、 按姓名查询和取消返回上一层。按学号查询时调用while语句对学号检索,再调 用if语句进行判断,最后输出想要查询的信息。按姓名查询的方法跟按学号查 询的一样。(6) Del删除函数:使用while语句进行检索,直接删除学生信息。(7) Change修改函数:建立devise函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行 相应的信息输入。在Change函数中使用while语句进行检索后再调用devise 函数修改信息。实现学生信息修改。四、调试与测试1、进行多次运行,发现那栏的一打长就会显示一

5、样的数字,打短的数字就可以。我们原本是使用长整型来定义,想说空间不够,后来改用字符型,用字符串记录程序运行结果正确。2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什 么,关于这个问题看了许多网上的资料,发现许多程序都有exit (0)的函数, 所以去查了不少关于exit的函数容,最后退出就用了 exit(0),但是又提醒说要 编写exit函数,之后发现要加入stdlib.h的头文件,程序可以正常运行。3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将 return 0删除了,不过这个程序在学校的机房即使不删return 0也是可以运行 的,关于

6、这点很是不解,还有待解决。五、测试结果1、进入系统界面,输入密码,超过三次会自动退出。+欢迎使用学生信息管理系统.密码为123詹输入您的密码二2、选1时录入学生信息,编辑完后会继续显示菜单学生的信息为:学号 姓名 年龄性别1 王福瑶19 女出生年月_地址 电话 Enail9409 福州 15705951000570123456学生信息管理系统2一一翎览学生 3-查询学生d4册臃学生5一修改学生0退出系统1一录入学生自心自心自4自心自心am含土豆=n=d'子生的姓名:王悦瑶、学生的年龄:19、学生的性别:女,学生的出生年月:9409i学生的地址:福州、学生的电话

7、学生的E-gil: 570123456入您的选择:3、选2浏览学生信息,之后继续返回菜单界面,为节省空间菜单界面暂不截图 请输入您的选择:2 学生总数:2学号姓名年龄性别出生年月地址 电话E-mail/% -*入 八 71% 八 /1% C/-% A 71% 八八/1%/1% / /"% /% /% A /1%/%A A A A 4L/% /"% /八 /"% 八 /1% C/% /-% A /1% 八 /1% 八八C /-S /% /%/%1王悦瑶19女9409 福州157059510005701234562陈贵珠20女9303 泉州15705951900123

8、546854、选择3查询学生信息会有按学号与按姓名查询。下图是先按学号查询的截图。12 0 按按按 请请请请输入您的选择:3按学号查询 按姓名查询 取梢人您的选择:1 入学生的学号,1姓名 年龄 性别 出生年月地址 电话 E-mail王悦瑶199409 福州 157059510005701234565、按姓名查询时,如果查无此人会显示“没有该学生信息,请核对。”之后返回上一层,按姓名查询。显示学生信息后可以选择取消返回主菜单。1按字号查询请按1 !I按姓名查询请按2 |I取消 请按0 I输入您的选择;2 输入竽生的姓名:李 看该学生记录,请核按学号查询请按1按姓名查询请按2取消 请按0SiAi

9、Miiri 一一"h 请输入学生的姓名:王悦瑶学号 姓名 年龄 性别出生年月地址 电话 E-mail1 王悦瑶 19 女 9409 福州 1570595100045641546548技学号查询按姓名查询I取消12 0 按按按 请清请入您的选择:6、选择4删除学生,输入学号删除学生的信息。之后会返回主菜单请输入您的选择,请输入您要删除的学生的学号:7选择5修改学生信息,按学号输入,之后按显示输入即可。+学生信息管理系统+1-送人学生信息+2浏览学生信息+3查询学生信息+4力|除学生信息+5-修改学生信息+0退出系统青输入您的选择;5青输入您要修改的学生的学号:L 青选择您要修改的学生的

10、信息内容:L月年ail 名龄别生址话-Ina消 姓年性出地电E-I取请请请请请清青请12345670青输入您的选择:6 青输入新电话几组测试数据进行测试算法设计的正确性。(附上程序运行的截图)六、用户手册1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序。2密码正确后会显示主菜单,按要求输入您的需求。七、附录源程序清单和结果:源程序要加注释。结果要包括测试数据和运行结果。/米 Note:Your choice is C IDE */ #include <stdio. h>#include <malloc. h>#include &l

11、t;string. h>include <io. h>#include <stdlib. h>#define NULL 0#define LEN sizeof(struct student)#define FILE_DATA_PATH Hc:student. txt” struct student long int num;char name20;int age;char sex4;char birthday10;char address30;char tele_num13;char E_mail20;struct student 米next;int TOTAL_

12、NUM = 0;struct student 米head = NULL;void welcomeO;void mainmenuO;void recordO;void insertCstruct student 米stu);void displayCstruct student *stu);void displayAll();void queryO;void query_by_num();void query_by_name();void readDataO;void writeDataO;void freeAHO;void del();void changeO;void devise(stru

13、ct student 米p);int main()char userPWD7; int i;welcomeO;for(i = 0; i < 3; i+)printf(”n 密码为 123n"); printf("n请输入您的密码:");scanf("%s", userPWD);if (strcmp(userPWD,"123" )=0)密码正确,显示主菜单mainmenuO; break; elseif (i < 2)/用户名或密码错误,提示用户重新输入printf("密码错误,请重新输入!”);else

14、/连续3次输错用户名或密 码,退出系统。printf。您已连续3次将密码输错,系统将退出!”);) )return 0;/显示欢迎信息void welcome()J*' t f (* -1-) printf("|In");printf(" |欢迎使用学生信息管理系统In");printf("|In");printf (");/系 统主 采 单void mainmenu() int choice; choice = -1;readDataO;printf。n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统 An&

15、quot;);do printf(HnnnH);printf("tttn");printf("ttt+学生信息管理系统In");printf("tttn");printf("ttt+1录入学生信息|n");printf("ttt+2一一浏览学生信息|nH);printf(Mttt+3查询学生信息I n”);printf(Mttt+4删除学生信息InM);printf("ttt+5修改学生信息|n");printf("ttt+0退出系统In");printf(&quo

16、t;tttn");printf(”请输入您的选择:");scanf("%d", &choice);switch(choice)case 0: writeDataO; freeAHO;exit(0);case 1: recordO;break;case 2: displayAHO;break;case 3: queryO;break;case 4: del();break;case 5: change();break;default:printf ("n 无效选项!");break;)whileCchoice != 0);/录入

17、学生信息void record() struct student *p0;pO = (struct student *)malloc(LEN);printf ("请输入学生的学号:");scanf , &p0->num);printf(n请输入学生的姓名:");scanf("%s", pO->name);printf(”请输入学生的年龄:”);scanf("%d", &pO->age);printf("请输入学生的性别:");scanf("%s", p

18、O->sex);printf("请输入学生的出生年月scanf("%s", pO->birthday);printf("请输入学生的地址:");scanf("%s", pO->address);printf("请输入学生的:”);scanf("%s", pO->tele_num);printfC请输入学生的E-mailscanf("%s", pO->E_mai1);insert(pO);printf("该学生的信息为:n");

19、printfC");printfC学号t姓名t年龄t性别t出生年月tt地址 ttE-mailn");display(pO);)void insert(struct student米stu)/根据学号对学生进行排序/struct student 米pO,*pl,米p2; pl = head;pO = stu;if(head = NULL) head = pO; pO->next = NULL;)else while(pO->num > pl->num)&&(pl->next != NULL) p2 = pl; pl = pl-&g

20、t;next; if(pO->num <= pl->num) if(head = pl) head = pO;else p2->next = pO;pO->next = pl; else pl->next = pO; pO->next = NULL; TOTAL.NUMH;void displayCstruct student *p)printf("%ldt%stodt%st%st%st%st%sn", p->niim, p->name, p->age, p>sex, p->birthday, p-&g

21、t;address, p->tele_num, p->E_niail);/汶4览学生信 息void displayAll()struct student *p;printf。学生总数:%dn", TOTAL.NUM);p = head;if(head != NULL) printf("n学号t姓名t年龄t性别t出生年月t地址 ttE-mailnn);printfCdo display(p); p = p->next; while(p != NULL); printfC n”);查询学生信息void query() int choice;choice = -

22、1;do printfC n");printfC +n");printfC I按学号查询请按1 |nn);printfC I按姓名查询 请按2 In");printfC I 取消 请按 0 In");printf("+n");printf("请输入您的选择:");scanf("%d", Schoice);switch(choice) case 0: return;case 1:query_by_num();break;case 2:query_by_name(); break;default:

23、printfC n 无效选项!”);break; )whileCchoice != 0);/按学号查询学生信息void query_by_num()int num;struct student 米pl;printf。请输入学生的学号:");scanf("%ld", &num);if(head=NULL) printf("无学生记录! n"); return; pl=head;while(num!=pl->num && pl->next!=NULL) pl=pl->next;if(num = pl->

24、;num) printf("n学号t姓名t年龄t性别t出生年月t地址 ttE-mailn");printfC");display(pl); else printf("没有该学生记录,请核对! ");/按 姓名查询学生信息void query_by_name() char name20; struct student *pl; printf("请输 入学生的姓名:");scanf("%s", name); if(head=NULL) printf("无学生记录! n");return;

25、pl=head;while(strcmp(name, pl->name) && pl->next!=NULL) pl=pl->next;if(!strcmpCname, pl->name) printf(”n学号t姓名t年龄t性别t出生年月t地址printfC");display(pl); else printf("没有该学生记录,请核对!");/写入文件void writeData() FILE* fp;文件指针struct student 米p;fp = fopen(FILE_DATA_PATH, "w&quo

26、t;);if (!fp) printf。文件打开错误! ”); return; fprintf(fp, "%dn", TOTAL.NUM);for(p = head; p!= NULL; p= p->next) fprintf (fp, ,%ldt%st%dt%st%st%st%st%snH, p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mai1);)fclose(fp); void freeAll()struct

27、 student *pl, *p2;pl=p2=head;while(pl) p2=pl->next; free(pl); pl=p2; 读取文件void readData() FILE* fp;文件指针struct student *pl, *p2;fp = fopen(FILE_DATA_PATH, " r");if (!fp) printf。文件打开错误! ”);fscanf(fp, "%dn", &TOTAL.NUM);head = pl = p2 = (struct student *)malloc(LEN);fscanf(fp,

28、 "%ldt%st%dt%st%st%st%st%sn",&pl->num,pl->name, &pl->age, pl->sex, pl->birthday, pl->address, &pl->tele_num, pl->E_mail);while(!feof(fp) pl = (struct student *)malloc(LEN);fscanf(fp, "%ldt%st%dt%st%st%st%st%sn",&pl->num, pl->name, &am

29、p;pl->age, pl->sex, pl->birthday, pl->address,&pl->tele_num, pl->E_mail); p2->next = pl; p2 = pl; p2->next = NULL; fclose(fp);删除学生信息void del() struct student *pl, *p2;long int num;if(head = NULL) printf。无学生记录! n"); return; printf。请输入您要删除的学生的学号:");scanf("%ld

30、", &num);pl = head;while(num != pl->num && pl->next != NULL) p2=pl;pl=pl->next; )if(num=pl->num) if(pl=head)head-pl->next;else p2->next=pl->next;free(pl);TOTAL_NUM"else printf("没有该学生记录»请核对! n");/修改学生信息void changeO struct student 米pl,米p2; long int num;if(head = NULL) printf("无学生记录! n");return; printf("请输入您要修改的学生的学号:scanf("%ld", &num);pl=head;whileCnum !=pl->num && pl->next != NULL) p2=pl; pl=pl->next; )if(num=pl->num) devise(pl);else printf("没有该学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论