《C语言及数据结构及算法课程设计报告.pdf》由会员分享,可在线阅读,更多相关《C语言及数据结构及算法课程设计报告.pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、福建工程学院软件学院福建工程学院软件学院c 语言及数据结构与算法课程设计语言及数据结构与算法课程设计题题目目 : :学生信息管理系统学生信息管理系统专专业:业:物联网工程物联网工程 14011401 班班姓姓名:名:黄志华学学号:号:31481201193148120119同组其他学生同组其他学生( (学号学号) ): 2626565657572015 年年6 月月24日日目 录一、需求分析.3二、总体设计.3三、详细设计.4四、调试与测试. 16五、测试结果.16六、用户手册.16七、附录.16一、需求分析一、需求分析问题描述学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-m
2、ail 等。试设计一学生信息管理系统,使之能提供以下功能:系统以菜单方式工作学生信息录入功能-输入学生信息浏览功能-输出查询、排序功能-算法按学号查询、按姓名查询、学生信息的删除与修改(可选项)(2)功能要求界面比较美观;有一定的容错能力,比如输入的成绩不在 0100 之间,就提示不合法,要求重新输入;最好用链表的方式实现。二、总体设计二、总体设计开始主菜单选择语句 switch(a)录入学生信息浏览学生信 息查询学生信 息删除学生信 息修改学生信 息退 出系 统12345主主菜单菜单0录入录入信息信息YN浏览学生信息浏览学生信息1按提示,录入学生信息选择是否继续输入学生信息返回主菜单2输出之
3、前保存的所有学生信息返回主菜单查询学生信息查询学生信息NY3输入已保存的学生学号输入是否正确输出符合学号的学生信息提示输入有误返回主菜单删除学生信息删除学生信息YN4输入已保存的学生学号输入是否正确删除已保存的学生信息提示输入有误返回主菜单修改学生信息修改学生信息NY5输入已保存的学生学号输入是否正确返回主菜单提示输入有误选择修改的内容修改的新内容直至取消修改三、详细设计三、详细设计各调用函数的设计与运行情况:(/录入学生信息void record ()struct student *p0;p0 = (struct student *)malloc(LEN);printf (请输入学生的姓名:
4、);scanf (%s,p0-name);printf (请输入学生的学号:);scanf (%ld,&p0-num);printf (请输入学生的性别:);scanf (%s,p0-sex);printf (请输入学生的年龄:);scanf (%d,&p0-age);printf (请输入学生的地址:);scanf (%s,p0-address);printf (请输入学生的电话:);scanf (%lf,&p0-tele_num);printf (请输入学生的 E-mail:);scanf (%s,p0-E_mail);insert (p0);printf (该学生的信息为:n);prin
5、tf (-n);printf (姓名t 学号t 年龄t 性别t 地址tt 电话ttE-mailn);display (p0);void insert (struct student *stu)struct student *p0, *p1, *p2;p1 = head;p0 = stu;if (head = NULL)head = p0;p0-next = NULL;elsewhile (p0-num p1-num)&(p1-next != NULL)p2 = p1;p1 = p1-next;if (p0-num num)if (head = p1)head = p0;elsep2-next
6、= p0;p0-next = p1;elsep1-next = p0;p0-next = NULL;TOTAL_NUM+;void display (struct student *p)printf (%st%ldt%dt%st%st%.0ft%sn, p-name, p-num, p-age, p-sex,p-address, p-tele_num, p-E_mail);/浏览学生信息void displayAll()struct student *p;printf(学生总数:%dn, TOTAL_NUM);p = head;if (head != NULL)printf(n 姓名t 学号t
7、 年龄t 性别t 地址tt 电话ttE-mailn);printf(-n);dodisplay(p);p = p-next;while(p != NULL);printf (n);/按学号查询学生信息void query_by_num ()int num;struct student *p1;printf(请输入学生的学号:);scanf(%ld, &num);if(head=NULL)printf(无学生记录!n);return;p1 = head;while (num!=p1-num & p1-next!=NULL)p1 = p1-next;if (num = p1-num)printf
8、(姓名t 学号t 年龄t 性别t 地址tt 电话ttE-mailn);printf (-n);display (p1);elseprintf (没有该学生记录,请核对!);/删除学生信息void del ()struct student *p1, *p2;long int num;if (head = NULL)printf(无学生记录!n);return;printf(请输入您要删除的学生的学号:);scanf(%ld, &num);p1 = head;while (num != p1-num & p1-next != NULL)p2 = p1;p1 = p1-next;if(num = p
9、1-num)if(p1 = head)head = p1-next;else p2-next = p1-next;free(p1);TOTAL_NUM-;elseprintf(没有该学生记录,请核对!n);/修改学生信息void change ()struct student *p1, *p2;long int num;if (head = NULL)printf (无学生记录!n);return;printf (请输入您要修改的学生的学号:);scanf (%ld, &num);p1 = head;while (num != p1-num & p1-next != NULL)p2 = p1;
10、p1 = p1-next;if(num = p1-num)devise (p1);elseprintf(没有该学生记录,请核对!n);void devise (struct student *p)int choice;choice = -1;doprintf(请选择您要修改的学生的信息内容:n);printf(+-+n);printf(| 姓名请按 1 |n);printf(| 学号请按 2 |n);printf(| 性别请按 3 |n);printf(| 年龄请按 4 |n);printf(| 地址请按 5 |n);printf(| 电话请按 6 |n);printf(| E-mail请按
11、7 |n);printf(| 取消请按 0 |n);printf(+-+n);printf(请输入您的选择:);scanf(%d, &choice);switch (choice)case 0:return;case 1:printf(请输入新姓名:);scanf(%s, p-name);break;case 2:printf(请输入新学号:);scanf(%d, &p-num);break;case 3:printf(请输入新性别:);scanf(%s, p-sex);break;case 4:printf(请输入新年龄:);scanf(%s, &p-age);break;case 5:pr
12、intf(请输入新地址:);scanf(%s, p-address);break;case 6:printf(请输入新电话:);scanf(%lf, &p-tele_num);break;case 7:printf(请输入新 E-mail:);scanf(%s, p-E_mail);break;default:printf(n 无效选项!);break;while(choice != 0);模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) )四、调试与测试四、调试与测试设计一个程序,错误是难免不了的。但我们可以根据编辑系统给出的一些提示去查看程序错误。对不敢肯定正确的,翻翻书
13、,看一下这一知识。对难度大的就和同学们一起讨论,问一问老师。开发一个系统,耐心是必要的,认真也很重要,构思要明确。认为是哪里错误的,有时用“/*/”注释起来进行,看看是否还有错误。常错有以下几种情况:1.使用变量,但未有定义,则先定义。2.不该用分号的,用到了,把它去掉。3.行最后若有分号则删除,中间若有分号则改成逗号4.若错误行中有 if、while、for 则要特别注意条件表达式的错误。5.若条件表达式中只有一个等于号,则改成两个等于号。6.for 中要用分号分隔表达式,而不是用逗号7.缺少分号,若错误行中有语句没有用分号结束,则加上分号。8.大小写不对,若错误行中有大写字母则一般都改成小
14、写字母。9.若有 return 语句则函数的类型必须与 return 后变量的类型一致。调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施五、测试结果五、测试结果测试数据运行结果详见“三具体设计” (程序运行的截图)六、用户手册六、用户手册按提示输入数据。七、附录七、附录源程序代码#include #include #include #include #define NULL 0#define LEN sizeof(struct student)struct studentchar name20;long int num;char sex4;int age;char ad
15、dress30;double tele_num;char E_mail20;struct student *next;/定义一个结构题int TOTAL_NUM = 0;/学生总数struct student *head = NULL;void welcome (); /欢迎界面void mainmenu (); /主界面void record (); /记录数据void insert(struct student *stu); /插入数据void display(struct student *stu); /显示一个学生的信息void displayAll (); /显示所有学生的信息voi
16、d query_by_num (); /按学号查询学生信息void readData (); /读取文件里学生的信息void writeData (); /向文件写入学生信息void freeAll (); /清空链表内容void del (); /删除学生信息void change (); /更改学生信息void devise (struct student *p); /选择更改内容int main (void)welcome ();/显示主菜单mainmenu ();return 0;/显示欢迎信息void welcome ()printf (tn);printf (tn);printf
17、(t欢迎使用福建工软物联网1401班学生信息管理系统n);printf (tn);printf (tn);/系统主菜单void mainmenu ()int choice;choice = -1;readData ();printf(ntt请先创建database.txt文件以便于保存学生数据);doprintf (nnn);printf(tt-n);printf (tt|工软物联网1401班学生信息管理系统|n);printf (tt-n);printf (tt|1-录入学生信息|n);printf (tt|2-浏览学生信息|n);printf (tt|3-查询学生信息|n);printf
18、(tt|4-删除学生信息|n);printf (tt|5-修改学生信息|n);printf (tt|0-退出系统|n);printf (tt|*|n);printf (tt-n);printf (请根据您的需要输入对应的编号:);scanf (%d, &choice);switch (choice)case 0:writeData ();freeAll ();exit (0);case 1:record ();break;case 2:displayAll ();break;case 3:query_by_num ();break;case 4:del ();break;case 5:chan
19、ge ();break;default:printf (n无效选项!);break;while (choice != 0);/录入学生信息void record ()struct student *p0;p0 = (struct student *)malloc(LEN);printf (请输入学生的姓名:);scanf (%s,p0-name);printf (请输入学生的学号:);scanf (%ld,&p0-num);printf (请输入学生的性别:);scanf (%s,p0-sex);printf (请输入学生的年龄:);scanf (%d,&p0-age);printf (请输入
20、学生的地址:);scanf (%s,p0-address);printf (请输入学生的电话:);scanf (%lf,&p0-tele_num);printf (请输入学生的E-mail:);scanf (%s,p0-E_mail);insert (p0);printf (该学生的信息为:n);printf(-n);printf (姓名t学号t年龄t性别t地址tt电话ttE-mailn);display (p0);void insert (struct student *stu)struct student *p0, *p1, *p2;p1 = head;p0 = stu;if (head
21、= NULL)head = p0;p0-next = NULL;elsewhile (p0-num p1-num)&(p1-next != NULL)p2 = p1;p1 = p1-next;if (p0-num num)if (head = p1)head = p0;elsep2-next = p0;p0-next = p1;elsep1-next = p0;p0-next = NULL;TOTAL_NUM+;void display (struct student *p)printf (%st%ldt%dt%st%st%.0ft%sn, p-name, p-num, p-age,p-sex
22、, p-address, p-tele_num, p-E_mail);/浏览学生信息void displayAll()struct student *p;printf(学生总数:%dn, TOTAL_NUM);p = head;if (head != NULL)printf(n姓名t学号t年龄t性别t地址tt电话ttE-mailn);printf(-n);dodisplay(p);p = p-next;while(p != NULL);printf (n);/按学号查询学生信息void query_by_num ()int num;struct student *p1;printf(请输入学生
23、的学号:);scanf(%ld, &num);if(head=NULL)printf(无学生记录!n);return;p1 = head;while (num!=p1-num & p1-next!=NULL)p1 = p1-next;if (num = p1-num)printf (姓名t学号t年龄t性别t地址tt电话ttE-mailn);printf(-n);display (p1);elseprintf (没有该学生记录,请核对!);/写入文件void writeData ()FILE*fp;/文件指针struct student *p;fp = fopen(database.txt, w
24、);if (!fp)printf(文件打开错误!);return;fprintf(fp,%dn, TOTAL_NUM);for(p = head; p!= NULL; p= p-next)fprintf(fp,%st%ldt%st%dt%st%.0ft%sn, p-name, p-num,p-sex, p-age, p-address, p-tele_num, p-E_mail);fclose (fp);void freeAll ()struct student *p1, *p2;p1 = p2=head;while(p1)p2=p1-next;free (p1);p1 = p2;/读取文件v
25、oid readData ()FILE*fp;/文件指针struct student *p1, *p2;fp = fopen(database.txt, r);if (!fp)printf(文件打开错误!);return;fscanf(fp,%dn, &TOTAL_NUM);head = p1 = p2 = (struct student *)malloc(LEN);fscanf(fp,%st%ldt%st%dt%st%lft%sn, p1-name, &p1-num,p1-sex, &p1-age, p1-address, &p1-tele_num, p1-E_mail);while(!fe
26、of(fp)p1 = (struct student *)malloc(LEN);fscanf(fp,%st%ldt%st%dt%st%lft%sn, p1-name, &p1-num,p1-sex, &p1-age, p1-address, &p1-tele_num, p1-E_mail);p2-next = p1;p2 = p1;p2-next = NULL;fclose(fp);/删除学生信息void del ()struct student *p1, *p2;long int num;if (head = NULL)printf(无学生记录!n);return;printf(请输入您要
27、删除的学生的学号:);scanf(%ld, &num);p1 = head;while (num != p1-num & p1-next != NULL)p2 = p1;p1 = p1-next;if(num = p1-num)if(p1 = head)head = p1-next;else p2-next = p1-next;free(p1);TOTAL_NUM-;elseprintf(没有该学生记录,请核对!n);/修改学生信息void change ()struct student *p1, *p2;long int num;if (head = NULL)printf (无学生记录!n
28、);return;printf (请输入您要修改的学生的学号:);scanf (%ld, &num);p1 = head;while (num != p1-num & p1-next != NULL)p2 = p1;p1 = p1-next;if(num = p1-num)devise (p1);elseprintf(没有该学生记录,请核对!n);void devise (struct student *p)int choice;choice = -1;doprintf(请选择您要修改的学生的信息内容:n);printf(+-+n);printf(| 姓名请按 1 |n);printf(| 学
29、号请按 2 |n);printf(| 性别请按 3 |n);printf(| 年龄请按 4 |n);printf(| 地址请按 5 |n);printf(| 电话请按 6 |n);printf(| E-mail请按 7 |n);printf(| 取消请按 0 |n);printf(+-+n);printf(请输入您的选择:);scanf(%d, &choice);switch (choice)case 0:return;case 1:printf(请输入新姓名:);scanf(%s, p-name);break;case 2:printf(请输入新学号:);scanf(%d, &p-num);
30、break;case 3:printf(请输入新性别:);scanf(%s, p-sex);break;case 4:printf(请输入新年龄:);scanf(%s, &p-age);break;case 5:printf(请输入新地址:);scanf(%s, p-address);break;case 6:printf(请输入新电话:);scanf(%lf, &p-tele_num);break;case 7:printf(请输入新E-mail:);scanf(%s, p-E_mail);break;default:printf(n无效选项!);break;while(choice != 0);源程序清单和结果:源程序要加注释。结果要包括测试数据和运行结果。