1、 XXXXXX大学 计算机科学与技术学院 课程设计报告 20XX— 20XX学年第二学期 课程名称 C语言课程设计 题 目 学生信息管理系统 学生姓名 XXXX 学 号 XXXXXXXX 专业班级 XXXXXXXX 指导教师 XXXXX 合 作 者 XXXX 20XX年 X月 X日 目录 摘要----------------------------------
2、3 1. 设计目的---------------------------------------------------4 2. 功能描述---------------------------------------------------4 2.1.总体功能设计---------------------------------------------------4 2.2.各模块功能------------------------------------------------------4 3. 总体设计-------------
3、5 3.1模块流程图-----------------------------------------------------5 3.2数据结构设计---------------------------------------------------5 3.3函数功能描述---------------------------------------------------6 4. 程序实现----------------------------------------------------
4、6 4.1详细模块介绍---------------------------------------------------6 4.2源代码------------------------------------------------------------13 4.3运行结果--------------------------------------21 学生信息管理系统 (摘要) 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息录入
5、功能(学生信息用文件保存)---输入 学生信息浏览功能---输出 查询、排序功能---算法 按学号查询 按姓名查询 学生信息的删除与修改(可选项) 1、设计目的 本程序旨在训练读者的基本编程能力,了解管理信息系统开发流程,熟悉C语言的编程环境.我们主要设计一个能实现学生信息管理系统,让它来运行和管理学生信息。它在现实生活中运用方便的、管理方便。它能输入学生学号、年龄、性别、出生年月、地址电话E-mail。系统以菜单的方式进行工作,进入子菜单后,还可以返回主菜单。在子菜单中的各种操作都有中
6、文说明,操作简单、易懂。只要我们正确的操作系统,系统就无异常现在,当然系统也能对一些基本的错误做出提示,并能让使用者重新进行操作。 对各个操作的成功,如:添加学生信息、修改学生信息、删除学 生信息,系统都输出“…….的成功”的字样。系统对删除和修改前,还进行“确定”和“取消”。系统对不存在的学号和姓名系统能判断是否存在。对已存在的学号,操作者不能添加和这个学号一样的学生信息,同时系统还提示已有此学号。对于修改、删除和查询,系统遇到不存在的学生能提示没有这个信息。 2、功能描述 2.1.总体功能设计: 学生信息管理系统存放了每个学生的学号、姓名、性别、年龄、出生年月日、地址、
7、电话号码、E-mail信息地数据库。每个人的信息定义在一个结构体变量中。其结构如下: 系统通过显示程序、添加程序、查询程序、删除程序、修改程序、排序程序来实现学生信息管理系统的显示功能、添加加功能、查询功能、删除功能、修改功能、排序功能。各个功能的调用通过主函数中的switch语句来实现。 2.2.各模块功能: 显示模块:通过设计一个模块,来实现学生信息的显示。以便于浏览学生的信息。 添加模块:通过设计一个模块,当要加入新的学生的信息的时候,来实现新学生信息的加入。 修改模块:通过设计一个模块,当某个人的信息发生变化的时候,可以通过修改模块
8、来进行修改。修改模块时一具有多级子菜单的摸块。使用十分的方便、灵活。 查询模块:通过设计一个模块,这个模块可以按学生的学号、姓名来查询学生所有的信息,并显示学生的所有信息,以便查询者阅读。 删除模块: 通过设计一个模块,当输入一个学生的学号或者姓名的时候,可以通过这个模块,将输入学号或者姓名的学生的所有信息从数据库中删除出去。以后,这个学生的信息将不再会出现再数据库中。 排序模块: 通过设计一个模块,来实现数据库的信息按某项成员名的伸序或者降序排列。这个模块提供了按学号来实现排序,使浏览者一目了然。 3、总体设计 3.1模块流程图 学生信
9、息管理系统
添加信息模块
退出系统
查询信息模块
删除信息模块
显示信息模块
修改信息模块
3.2数据结构设计
1.头文件说明
#include
10、 定义、编写记录(数据)查找函数; 3.结构体设计 struct student /*结构体*/ { int num; char name[20]; //学号 char sex[5]; //姓名 int age; //性别 char bro[15]; //年龄 char add[30]; //住址 char phone[13]; //手机号 char em[20]; //E-mail
11、 }stu[100]; //结构体名 3.3函数功能描述 函数名 功能 main() 主函数 tianjia() 添加信息 xiugai() 修改信息 quanbu() 显示全部信息 chakan() 查找信息 looknum() 判断是否已有要添加信息 shanchu() 删除信息 4、程序实现 4.1详细模块介绍 1.添加信息模块。该模块作用是,添加学生的信息,包括学号,姓名,性别,年龄,出生日期,住址,手机号,e-mail几方面的信息。添加学生学号在1
12、00以内。 tianjia() /*添加信息函数*/ { FILE *fp; int num,num2,i,x; fp=fopen("stu2.txt","ab+"); G:printf("\t请输入学号:"); H:scanf("%d",&num); V:if(num>100) {printf("\n这个学号太大了!\n请输入1--100 的学号:"); scanf("%d",&num); if(num>100)goto V; printf("\n"); } num2=looknum(nu
13、m); if(num==num2) /*判断这个学号是否存在*/ {printf("\n这个学号已经存在,请重新输入另一个学号。"); goto H; } i=num-1; stu[i].num=num; printf("\t请输入姓名:"); scanf("%s",stu[i].name); printf("\t请输入性别:"); scanf("%s",stu[i].sex); printf("\t请输入年龄:"); scanf("%d",&stu[i].age); pri
14、ntf("\t请输入出生日期:"); scanf("%s",stu[i].bro); printf("\t请输入住址:"); scanf("%s",stu[i].add); printf("\t请输入手机号:"); scanf("%s",stu[i].phone); printf("\t请输入E-maill:"); scanf("%s",stu[i].em); printf("\n\t<*添加信息成功*>\n\n"); printf("\t1.继续添加\n"); printf("\t2.退出添加\n");
15、 scanf("%d",&x); switch(x) {case 1:goto G; default:break;} fclose(fp); } 2.显示信息模块。该模块作用是,按学号顺序显示全部学生的信息,包括学号,姓名,性别,年龄,出生日期,住址,手机号,e-mail几方面的信息。 quanbu()/*输出全部信息函数*/ {int i; FILE *fp; fp=fopen("stu2.txt","rb"); printf("\t\t全部学生信息如下\n\n"); pr
16、intf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); for(i=0;i<=100;i++) if(stu[i].num!=0) printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bro,stu[i].add,stu[i].phone,stu[i].em); fclose(fp); } 3.修改信息模块。输入要修改的学生学号,先判断这个学号是否存在。如果存在,系统
17、就确认修改信息,并重新输入信息。如果不存在,系统提示输入错误,返回菜单。 xiugai()/*修改信息函数*/ { FILE *fp; int x,y,num,num2; K:printf("\t请输入要修改的学号:"); scanf("%d",&num); num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ { printf("\n\t这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号
18、\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n", stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em); printf("\n\t1.确认修改"); printf("\n\t2.取消修改\n"); scanf("%d",&x); if(x==1)
19、 { stu[num-1].num=num; fp=fopen("stu2.txt","rb+"); printf("\t请输入姓名:"); scanf("%s",stu[num-1].name); printf("\t请输入性别:"); scanf("%s",stu[num-1].sex); printf("\t请输入年龄:"); scanf("%d",&stu[num-1].age); printf("\t请输入出生日期:");
20、 scanf("%s",stu[num-1].bro); printf("\t请输入住址:"); scanf("%s",stu[num-1].add); printf("\t请输入手机号:"); scanf("%s",stu[num-1].phone); printf("\t请输入E-maill:"); scanf("%s",stu[num-1].em); printf("\n\t<*修改信息成功*>\n"); goto P; fclose(fp);
21、 fp=fopen("stu2.txt","rb"); } else goto P; } else {printf("\n\t※※※※没有这个学号,你可能记错了!\n"); P:printf("\n\t※※※※1.继续修改\n"); printf("\t※※※※2.退出修改\n"); scanf("%d",&y); switch(y) {case 1:goto K; default:break; } } fclose(fp);} 4.删除信息模块。输入要删除的
22、学生学号,先判断这个学号是否存在。如果存在,系统就确认删除错误的信息。如果不存在,系统提示输入错误,返回菜单。 void shanchu()/*删除信息函数*/ {int x=2,y=2,num,num2; FILE *fp; fp=fopen("stu2.txt","ab+"); rewind(fp); L:printf("\t※※※※请输入要删除的学号:"); scanf("%d",&num); num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ {printf(
23、"\n\t※※※※这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em); printf("\n\t
24、※※※※1.确认删除"); printf("\n\t※※※※2.取消删除\n"); scanf("%d",&x); switch(x) {case 1:{stu[num-1].num=0; printf("\t===========<*删除信息成功*>=============\n");} default:break; } goto D; } else {printf("\n\t※※※※没有这个学号,你可能记错了!\n"); D:printf("\n\t※※※※
25、1.继续删除\n"); printf("\t※※※※2.退出删除\n"); scanf("%d",&y); switch(y) {case 1:goto L; default:break;} } fclose(fp); } 5.查询信息模块。输入要查询的学生的姓名或学号,先判断这个学号是否存在。如果该姓名或学号存在,系统就显示相关信息的信息。如果不存在,系统提示输入错误,返回菜单。 void chakan()/*查看信息函数*/ { FILE *fp;
26、int x=1,y=2,z=2,i,num,num2; char name,name2; fp=fopen("stu2.txt","rb"); rewind(fp); printf("\t※※※※1.按学号查询\n\t※※※※2.按姓名查询\n"); scanf("%d",&x); /*输入查看方式*/ if(x==1) /*学号查询*/ { M:printf("\t※※※※请输入查看的学号:"); scanf("%d",&num); num2=looknum(num);
27、 if(num==num2) /*判断这个学号是否存在*/ {printf("\t这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em);
28、 goto J; } else {printf("\n\t※※※※没有这个学号,你可能记错了!\n"); J: printf("\n\t※※※※1.继续查看\n"); printf("\t※※※※2.退出查看\n"); scanf("%d",&y); switch(y) {case 1:goto M; default:break; } } } if(x==2) /*姓名查询*/ { U:printf("\t※※※※请输入查看的姓名:"
29、); scanf("%s",&name); for(i=0;i<=100;i++) {if(strcmp(&stu[i].name,&name)==0)/*字符串比较*/ if(stu[i].num!=0) /*判断这个学号是否存在*/ {printf("\t这个姓名信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[i
30、].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bro,stu[i].add,stu[i].phone,stu[i].em); goto Q; } } if(i==101) { printf("\n\t※※※※没有这个姓名,你可能记错了!\n"); Q: printf("\n\t※※※※1.继续查看\n"); printf("\t※※※※2.退出查看\n"); scanf("%d",&z); sw
31、itch(z) {case 1:goto U; default:break;} } } fclose(fp); } 6.退出系统模块。该模块是一个主函数,输入“6”系统退出。 main()/*主函数*/ { int a; printf("\n\t ************************欢迎使用*********************\n\n"); printf("********************************************
32、\n"); printf("\t ***************非校内人士,不得使用**************\n"); printf("\t-------------------------------------------------------\n"); T:printf("\n\n\t ※※※※1.添加学生信息\n\t ※※※※2.全部学生信息\n\t ※※※※3.修改学生信息\n\t ※※※※4.删除学生信息\n\t ※※※※5.查看学生信息\n\t ※※※※6.退出系统\n"); printf
33、"\n **********===========***********===========*************============***********\n"); scanf("%d",&a); switch(a) {case 1:tianjia();goto T; case 2:quanbu();goto T; case 3:xiugai();goto T; case 4:shanchu();goto T; case 5:chakan();goto T; case 6:break;
34、 default: printf("\t※※※※你的输入不正确,请再次输入:\n");goto T;
}
printf("\t※※※※谢谢您对本系统的支持和使用※※※※\n\n");
printf("\t=============2016年6月29日===============\n\n\n\n\n\n\n\n\n\n\n\n\n"); }
4.2源代码
#include
35、 char sex[5]; //姓名 int age; //性别 char bro[15]; //年龄 char add[30]; //住址 char phone[13]; //手机号 char em[20]; //E-mail }stu[100]; //结构体名 int looknum(int num) /*查看是否有这个学号的函数*/ { int i; FILE *fp; fp=fopen("stu2.txt"
36、"rb"); rewind(fp); for(i=0;i<=100;i++) if(stu[i].num==num) return(num); fclose(fp); } tianjia() /*添加信息函数*/ { FILE *fp; int num,num2,i,x; fp=fopen("stu2.txt","ab+"); G:printf("\t请输入学号:"); H:scanf("%d",&num); V:if(num>100) {printf("\n这个学号太大了!\n请输入1--100 的
37、学号:"); scanf("%d",&num); if(num>100)goto V; printf("\n"); } num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ {printf("\n这个学号已经存在,请重新输入另一个学号。"); goto H; } i=num-1; stu[i].num=num; printf("\t请输入姓名:"); scanf("%s",stu[i].name); printf
38、"\t请输入性别:"); scanf("%s",stu[i].sex); printf("\t请输入年龄:"); scanf("%d",&stu[i].age); printf("\t请输入出生日期:"); scanf("%s",stu[i].bro); printf("\t请输入住址:"); scanf("%s",stu[i].add); printf("\t请输入手机号:"); scanf("%s",stu[i].phone); printf("\t请输入E-maill:"); scanf("%s"
39、stu[i].em); printf("\n\t<*添加信息成功*>\n\n"); printf("\t1.继续添加\n"); printf("\t2.退出添加\n"); scanf("%d",&x); switch(x) {case 1:goto G; default:break;} fclose(fp); } quanbu()/*输出全部信息函数*/ {int i; FILE *fp; fp=fopen("stu2.txt","rb"); printf("\t\t
40、全部学生信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); for(i=0;i<=100;i++) if(stu[i].num!=0) printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bro,stu[i].add,stu[i].phone,stu[i].em); fclose(fp); } xiugai()/*修改信息函数*/ {
41、 FILE *fp; int x,y,num,num2; K:printf("\t请输入要修改的学号:"); scanf("%d",&num); num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ { printf("\n\t这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号 \t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s
42、\n", stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em); printf("\n\t1.确认修改"); printf("\n\t2.取消修改\n"); scanf("%d",&x); if(x==1) { stu[num-1].num=num; fp=fopen("stu2.txt","rb+");
43、 printf("\t请输入姓名:"); scanf("%s",stu[num-1].name); printf("\t请输入性别:"); scanf("%s",stu[num-1].sex); printf("\t请输入年龄:"); scanf("%d",&stu[num-1].age); printf("\t请输入出生日期:"); scanf("%s",stu[num-1].bro); printf("\t请输入住址:");
44、 scanf("%s",stu[num-1].add); printf("\t请输入手机号:"); scanf("%s",stu[num-1].phone); printf("\t请输入E-maill:"); scanf("%s",stu[num-1].em); printf("\n\t<*修改信息成功*>\n"); goto P; fclose(fp); fp=fopen("stu2.txt","rb"); } else goto P; } else
45、 {printf("\n\t※※※※没有这个学号,你可能记错了!\n"); P:printf("\n\t※※※※1.继续修改\n"); printf("\t※※※※2.退出修改\n"); scanf("%d",&y); switch(y) {case 1:goto K; default:break; } } fclose(fp);} void shanchu()/*删除信息函数*/ {int x=2,y=2,num,num2; FILE *fp; fp=fopen("stu
46、2.txt","ab+"); rewind(fp); L:printf("\t※※※※请输入要删除的学号:"); scanf("%d",&num); num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ {printf("\n\t※※※※这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\
47、t%s\t%s\t%s\n",stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em); printf("\n\t※※※※1.确认删除"); printf("\n\t※※※※2.取消删除\n"); scanf("%d",&x); switch(x) {case 1:{stu[num-1].num=0; printf("\t=====
48、<*删除信息成功*>=============\n");} default:break; } goto D; } else {printf("\n\t※※※※没有这个学号,你可能记错了!\n"); D:printf("\n\t※※※※1.继续删除\n"); printf("\t※※※※2.退出删除\n"); scanf("%d",&y); switch(y) {case 1:goto L; default:break;} } fclose(fp);
49、 } void chakan()/*查看信息函数*/ { FILE *fp; int x=1,y=2,z=2,i,num,num2; char name,name2; fp=fopen("stu2.txt","rb"); rewind(fp); printf("\t※※※※1.按学号查询\n\t※※※※2.按姓名查询\n"); scanf("%d",&x); /*输入查看方式*/ if(x==1) /*学号查询*/ { M:printf("\t※※※※请
50、输入查看的学号:"); scanf("%d",&num); num2=looknum(num); if(num==num2) /*判断这个学号是否存在*/ {printf("\t这个学号信息如下\n\n"); printf("学号\t姓名\t性别\t年龄\t出生日期\t住址\t手机号\t\tE-mail\n"); printf("%d\t%s\t%s\t%d\t%s\t%s\t%s\t%s\n",stu[num-1].num,stu[num-1].name,stu[num-1].sex,stu[num-1].age,stu






