1、内蒙古科技大学本科生课程设计说明书题 目:C 语言课程设计 学生信息管理系统学生姓名:王佳星学 号:1176807329专 业:2011-计算机班 级:3 班指导教师:余金林内蒙古科技大学课程设计说明书I内蒙古科技大学课程设计任务书课程名称 C 语言课程设计设计题目 学生信息管理系统指导教师 余金林 时间一、教学要求1. 巩固和加深学生对 C 语言课程的基本知识的理解和掌握2. 掌握 C 语言编程和程序调试的基本技能3. 利用 C 语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用 C 语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题
2、,独立完成,题目选定后不可更换。某班学生基本信息管理,包括以下功能: 从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里 具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录) 具有插入、修改和删除信息的功能 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多 3 人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少 3 个函数,每
3、人至少 200 行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1 C 语言程序设计 ,谭浩强,清华大学出版社2 C 语言程序设计课程设计 ,刘振安,机械工业出版社内蒙古科技大
4、学课程设计说明书II内蒙古科技大学课程设计说明书III目 录内蒙古科技大学课程设计任务书 I第一章 需求分析 31.1 引言 31.2 任务概述 31.3 数据描述 31.4 功能需求 31.5 性能需求 3第二章 概要设计 42.1 总体设计 42.2 数据类型设计(或数据结构设计) 62.3 接口设计 /函数声明 62.4 运行界面设计 6第三章 详细设计 83.1 输入模块设计 83.2 输出模块设计 83.3 查找模块设计 93.4 保存及读取模块设计 10第四章 测试分析 114.1 测试程序执行情况 11第五章 课程设计总结 14附录:程序代码 15参考文献 26致谢 26内蒙古科
5、技大学课程设计说明书4第一章 需求分析1.1 引言学生基本信息管理系统1.2 任务概述1.建立学生信息,信息至少包含学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话地址等;2.能够提供新建、浏览、查找、修改和删除通讯录信息的功能;3.能够提供安不同方式查询的功能;如按姓名或电话等查询;1.3 数据描述struct student char NO20;char name20;int age;char sex3; /*F表示性别男, M表示性别女*/char birthday10;char address30;char phone20;char e_mail20;struct s
6、tudent *next; /下个结点;1.4 功能需求1、输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、删除功能:对指定学生的信息进行删除。3、修改功能:对指定学生的信息进行修改。4、查询功能:选择某种方式并输入该信息查询符合条件的学生信息。5 排序功能:以英语课程的分数为依据对学生信息进行排序。6 显示功能:将以上功能操作后的学生信息显示出来。7 退出主菜单。1.5 性能需求1、输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、删除功能:对指定学生的信息进行删除。3、修改功能:对指定学生的信息进行修改。内蒙古科技大学课程设计说明书54、查询功能:选择某种方式并输
7、入该信息查询符合条件的学生信息。5 排序功能:以英语课程的分数为依据对学生信息进行排序。6 显示功能:将以上功能操作后的学生信息显示出来。7 退出主菜单。第二章 概要设计2.1 总体设计总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。也可根据自己对题目的理解增加新的功能模块。系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行内蒙古科技大学课程设计说明书62、输入要删除的学生的编号,删除学生信息。1 输入学生的信息: 学生姓名,学号,性别年龄,出生日期,电话 菜单1. 新增学生信
8、息2. 删除学生信息3. 导入学生信息4. 学生信息搜索5. 学生信息保存6. 退出7 保存学生信息:提示保存成功4、输入你要查找你学生姓名3、输出学生的学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话8、退出系统学生管理系统功能模块图内蒙古科技大学课程设计说明书72.2 数据类型设计(或数据结构设计)struct student char NO20;char name20;int age;char sex3; /*F表示性别男, M表示性别女*/char birthday10;char address30;char phone20;char e_mail20;struct
9、student *next; /下个结点;2.3 接口设计 /函数声明表 2.1:函数列表函数名 函数格式 /即函数首部 函数功能void show_menu(); void 显示菜单void menu(); void 执行菜单void creat_stu();void 建立链表void insert_stu(); void 学生信息录入void print_stu(); void 学生信息浏览void search_NO();void 以学号方式查询信息void search_name();void 以姓名方式查询信息void arrage_stu();void 排序void del_stu
10、(); void 删除学生信息void revise_stu();void 修改学生信息void save(); void 保存信息2.4 运行界面设计主菜单模块内蒙古科技大学课程设计说明书8采用 switch()函数从键盘选择相应菜单的对应功能。switch(c)getchar();case 1:insert_stu();break; /学生信息录入case 2:print_stu();break; /学生信息浏览case 3:search_NO(); break; /以学号方式查询信息case 4:search_name(); break; /以姓名方式查询信息case 5:del_stu
11、(); break; /删除学生信息case 6:revise_stu(); break; /修改学生信息case 7:arrage_stu();break; /保存信息case 0:exit(0); /退出 内蒙古科技大学课程设计说明书9第三章 详细设计3.1 输入模块设计数据插入模块采用 scanf( )函数输入新联系人信息插入至结构数组中。PF(“tt 输入学生学号:t“);scanf(“%s“,p1-NO); /学号PF(“tt 输入学生姓名:t“); scanf(“%s“,p1-name); /姓名PF(“tt 输入学生年龄:t“);scanf(“%d“, /年龄 PF(“tt 输入
12、学生性别:t“);scanf(“%s“,p1-sex); /性别PF(“tt 输入学生出生年月:t“);scanf(“%s“,p1-birthday); /出生年月PF(“tt 输入学生地址:t“);scanf(“%s“,p1-address); /地址PF(“tt 输入学生电话:t“);scanf(“%s“,p1-phone); /电话PF(“tt 输入学生 E-mail:t“);scanf(“%s“,p1-e_mail); /E-mailn+;3.2 输出模块设计数据浏览模块采用分屏显示,每屏 3 条记录。用 fread 或 fscanf 读文件,输出结果。for(p=head-next;
13、p!=NULL;p=p-next) /读出信息PF(“学生信息浏览n“);PF(“tt 学生学号:t%sn“,p-NO);PF(“tt 学生姓名:t%sn“,p-name);PF(“tt 学生年龄:t%dn“,p-age);PF(“tt 学生性别:t%sn“,p-sex);PF(“tt 学生出生年月:t%sn“,p-birthday);PF(“tt 学生地址:t%sn“,p-address);PF(“tt 学生电话:t%sn“,p-phone);PF(“tt 学生 E-mail:t%sn“,p-e_mail);PF(“n“); /输出信息内蒙古科技大学课程设计说明书103.3 查找模块设计1)
14、 按姓名查找模块通过键盘输入要查找的学生姓名,然后与结构数组中的姓名信息逐一比对,找出学生信息并输出void search_name() /学生姓名信息查找STU *p=NULL;char name20;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;PF(“输入学生姓名:“);scanf(“%s“,name);for(p=head-next;p!=NULL;p=p-next) /读出信息if(!strcmp(p-name,name)3) 按学号查找模块通过键盘输入要查找的学生学号,然后与结构数组中的电话信息逐一比对,找出学生信息并输出void sea
15、rch_NO() /学生学号信息查找STU *p=NULL;char NO20;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;PF(“请输入学生学号:“);scanf(“%s“,NO);for(p=head-next;p!=NULL;p=p-next) /读出信息if(!strcmp(p-NO,NO)内蒙古科技大学课程设计说明书113.4 保存及读取模块设计void save()printf(“保存信息并结束n“);STU *p=NULL;FILE *fp;char *filename=“fname.txt“;if(fp=fopen(“fname.t
16、xt“,“w“)=NULL) /出错检测printf(“n 打不开文件 !n“);return;if(head-next=NULL)printf(“n 信息为空 !n“);return;elsep=head-next;while(p!=NULL)fprintf(fp,“%s %s %d %s %s %s %s %sn“,p-NO,p-name,p-age,p-sex,p-birthday,p-address,p-phone,p-e_mail);/存入文件p=p-next;printf(“保存完毕!n“);fclose(fp); 内蒙古科技大学课程设计说明书12第四章 测试分析4.1 测试程序执
17、行情况主菜单输入学生信息学生信息浏览内蒙古科技大学课程设计说明书13按学号查找学生信息按姓名查找学生信息修改学生信息内蒙古科技大学课程设计说明书14内蒙古科技大学课程设计说明书15第五章 课程设计总结在我们上机调试程序的过程中,我遇到了很多的问题,说实话这次课程设计自己没有出多大的力,大部分都是借鉴同学的设计成果,自己设计是总是觉得没有头绪,无从下手。看到同学认真看程序的样子,还有修改程序时的熟练,我很羡慕他,我想,我也要将 C+学好,在将来能为我的就业加分。在这期末考试前期,学院给我们安排的课程设计周,总让我们觉的有些为难我们,这样一个复杂困难而又繁琐的作业,似乎弄得我们既没有时间也没有心情
18、复习,我曾一度地抱怨过学院,在完成它之后,我发现我错了,课程设计不仅让我们巩固了所学的知识,还使得我们学习到了更多平时所忽略的,最重要的是,它磨砺了我们,让我们在大学的下一个阶段能更好的成长。内蒙古科技大学课程设计说明书16附录:程序代码#include #include #include #define PF printf#define LEN sizeof(struct student)/定义结构体struct student char NO20;char name20;int age;char sex3; /*F表示性别男, M表示性别女*/char birthday10;char ad
19、dress30;char phone20;char e_mail20;struct student *next; /下个结点;typedef struct student STU;STU *head=NULL; /全局指针int n,i=0; /全局变量/自定义函数void show_menu(); /显示菜单void menu(); /执行菜单void creat_stu(); /建立链表 void insert_stu(); /学生信息录入void print_stu(); /学生信浏览void search_NO(); /以学号方式查询信息void search_name(); /以姓名
20、方式查询信息void arrage_stu(); /排序void del_stu(); /删除学生信息void revise_stu(); /修改学生信息void save(); /保存信息void main()内蒙古科技大学课程设计说明书17creat_stu();menu();/创建链表 void creat_stu()FILE *fp;long size;STU *p1,*p2;head=(STU *)malloc(sizeof(STU);head-next=NULL;if(fp=fopen(“fname.txt“,“r“)=NULL)printf(“这是新表n“);return;fse
21、ek(fp,0L,2);size=ftell(fp);if(!size)printf(“这是空表n“);return; /开始创建链表rewind(fp); /移动到文件首p2=head-next; /找到但前位置while(!feof(fp) p1=(STU *)malloc(sizeof(STU);fscanf(fp,“%s %s %d %s %s %s %s %sn“,p1-NO,p1-name,p1-next=NULL;/创建节点完if(head-next=NULL)head-next=p1;elsep2-next=p1;p2=p1;n+;内蒙古科技大学课程设计说明书18p2-next
22、=NULL;fclose(fp);/执行菜单void menu()int c;show_menu();while(1)scanf(“%d“,switch(c)getchar();case 1:insert_stu();break;case 2:print_stu();break;case 3:search_NO(); break;case 4:search_name(); break;case 5:del_stu(); break;case 6:revise_stu(); break;case 7:arrage_stu();break;case 0:exit(0); /执行菜单选项show_m
23、enu();/显示菜单 void show_menu()PF(“n“);PF(“n菜单n“);PF(“tt1.输 入 学 生 信 息 n“);PF(“tt2.浏 览 学 生 信 息 n“);PF(“tt3.以学号方式查询信息n“);PF(“tt4.以姓名方式查询信息n“);内蒙古科技大学课程设计说明书19PF(“tt5.删 除 学 生 信 息 n“);PF(“tt6.修 改 学 生 信 息 n“);PF(“tt7 排 序 n“);PF(“tt0. 退 出 n“);PF(“n“);PF(“n 请选择 n“);/学生信息录入 void insert_stu() /学生信息录入n=0;STU *p1
24、=NULL,*p2=NULL;p1=(STU *)malloc(sizeof(STU);PF(“n录入学生信息n“); /录入学生信息PF(“tt 输入学生学号:t“);scanf(“%s“,p1-NO); /学号PF(“tt 输入学生姓名:t“); scanf(“%s“,p1-name); /姓名PF(“tt 输入学生年龄:t“);scanf(“%d“, /年龄 PF(“tt 输入学生性别:t“);scanf(“%s“,p1-sex); /性别PF(“tt 输入学生出生年月:t“);scanf(“%s“,p1-birthday); /出生年月PF(“tt 输入学生地址:t“);scanf(“
25、%s“,p1-address); /地址PF(“tt 输入学生电话:t“);scanf(“%s“,p1-phone); /电话PF(“tt 输入学生 E-mail:t“);scanf(“%s“,p1-e_mail); /E-mailn+;if(head-next=NULL)head=(STU *)malloc(LEN);head-next=p1;内蒙古科技大学课程设计说明书20elsefor(p2=head;p2-next!=NULL;p2=p2-next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2-next=p1;p1-next=NULL;save();/保存到文件 /学生信
26、息浏览 void print_stu() /学生信浏览STU *p=NULL;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;for(p=head-next;p!=NULL;p=p-next) /读出信息PF(“学生信息浏览n“);PF(“tt 学生学号:t%sn“,p-NO);PF(“tt 学生姓名:t%sn“,p-name);PF(“tt 学生年龄:t%dn“,p-age);PF(“tt 学生性别:t%sn“,p-sex);PF(“tt 学生出生年月:t%sn“,p-birthday);PF(“tt 学生地址:t%sn“,p-address);PF
27、(“tt 学生电话:t%sn“,p-phone);PF(“tt 学生 E-mail:t%sn“,p-e_mail);PF(“n“); /输出信息/学生姓名信息查找 void search_name() /学生姓名信息查找STU *p=NULL;char name20;if(head=NULL) /判断链表是否为空内蒙古科技大学课程设计说明书21PF(“文档中无记录!n“);return;PF(“输入学生姓名:“);scanf(“%s“,name);for(p=head-next;p!=NULL;p=p-next) /读出信息if(!strcmp(p-name,name)PF(“您查找的学生是n
28、“);PF(“tt 学生学号:t%sn“,p-NO);PF(“tt 学生姓名:t%sn“,p-name);PF(“tt 学生年龄:t%dn“,p-age);PF(“tt 学生性别:t%sn“,p-sex);PF(“tt 学生出生年月:t%sn“,p-birthday);PF(“tt 学生地址:t%sn“,p-address);PF(“tt 学生电话:t%sn“,p-phone);PF(“tt 学生 E-mail:t%sn“,p-e_mail);PF(“n“);i=1; /输出信息 if(!i)PF(“无该生信息!请查证:“); /没找到信息时的处理 /学生学号信息查找 void search_
29、NO() /学生学号信息查找STU *p=NULL;char NO20;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;PF(“请输入学生学号:“);scanf(“%s“,NO);for(p=head-next;p!=NULL;p=p-next) /读出信息if(!strcmp(p-NO,NO)内蒙古科技大学课程设计说明书22PF(“您查找的学生是n“);PF(“tt 学生学号:t%sn“,p-NO);PF(“tt 学生姓名:t%sn“,p-name);PF(“tt 学生年龄:t%dn“,p-age);PF(“tt 学生性别:t%sn“,p-sex);
30、PF(“tt 学生出生年月:t%sn“,p-birthday);PF(“tt 学生地址:t%sn“,p-address);PF(“tt 学生电话:t%sn“,p-phone);PF(“tt 学生 E-mail:t%sn“,p-e_mail);PF(“n“);i=1; /输出信息 if(!i)PF(“无该生信息!请查证:“); /没找到信息时的处理 /修改学生信息 void revise_stu()STU *p=NULL;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;char NO20;PF(“请输入学生的学号:t“);scanf(“%s“,NO);f
31、or(p=head-next;p!=NULL;p=p-next) if(!strcmp(p-NO,NO) /验证信息是否正确PF(“ 您要修改的学生是n“);PF(“tt 学生学号:t%sn“,p-NO);PF(“tt 学生姓名:t%sn“,p-name);PF(“tt 学生年龄:t%dn“,p-age);PF(“tt 学生性别:t%sn“,p-sex);PF(“tt 学生出生年月:t%sn“,p-birthday);内蒙古科技大学课程设计说明书23PF(“tt 学生地址:t%sn“,p-address);PF(“tt 学生电话:t%sn“,p-phone);PF(“tt 学生 E-mail:
32、t%sn“,p-e_mail);PF(“n“); /输出要修改信息i=1;PF(“修改学号为%s 的学生n“,NO);strcpy(p-NO,NO);PF(“tt 输入修改学生姓名:t“);scanf(“%s“,p-name); PF(“tt 输入修改学生年龄:t“);scanf(“%d“, PF(“tt 输入修改学生性别:t“);scanf(“%s“,p-sex); PF(“tt 输入修改学生出生年月:t“);scanf(“%s“,p-birthday); PF(“tt 输入修改学生地址:t“);scanf(“%s“,p-address); PF(“tt 输入修改学生电话:t“);scanf
33、(“%s“,p-phone); PF(“tt 输入修改学生 E-mail:t“);scanf(“%s“,p-e_mail); PF(“n“); /输入修改信息save();if(!i) PF(“无该生信息!请查证:“); /*没找到信息时的处理*/删除学生信息 void del_stu()STU *p=NULL;if(head=NULL) /判断链表是否为空PF(“文档中无记录!n“);return;else内蒙古科技大学课程设计说明书24char NO20;PF(“请输入学生的学号 :t“);scanf(“%s“,NO);for(p=head;p!=NULL;p=p-next) if(!st
34、rcmp(p-next-NO,NO) /验证信息是否正确PF(“ 您要删除的学生是n“);PF(“tt 学生学号:t%sn“,p-next-NO);PF(“tt 学生姓名:t%sn“,p-next-name);PF(“tt 学生年龄:t%dn“,p-next-age);PF(“tt 学生性别:t%sn“,p-next-sex);PF(“tt 学生出生年月:t%sn“,p-next-birthday);PF(“tt 学生地址:t%sn“,p-next-address);PF(“tt 学生电话:t%sn“,p-next-phone);PF(“tt 学生 E-mail:t%sn“,p-next-e_
35、mail);PF(“n“); /输出要删除的信息i=1;if(p-next-next)printf(“第一个n“);p-next=p-next-next;elsep-next=NULL;n-;save();return;if(!i) PF(“无该生信息!请查证:“); /没找到信息时的处理return; /按学号排序 void arrage_stu() STU *p1,*p2;int in=0,j;内蒙古科技大学课程设计说明书25if(head-next=NULL) /首先判断 printf(“你还没有记录,无法排序n“);return ;printf(“n=%d“,n);p1=head-next;for(in=0;innext;jnext,j+)if(j=0)/第一次比较第一个和第二个节点信息if(strcmp(p1-NO,p1-next-NO)/比较 p1 本身和 p1 下一个节点p2=p1-next;p1-next=p1-next-next;p2-next=p1;head-next=p2;p1=head-next;/从新给 CUR 赋值/*p1=head-next;p1=p2;错误