资源描述
XXXXXX大学
计算机科学与技术学院
课程设计报告
20XX— 20XX学年第二学期
课程名称 C语言课程设计
题 目 学生信息管理系统
学生姓名 XXXX
学 号 XXXXXXXX
专业班级 XXXXXXXX
指导教师 XXXXX
合 作 者 XXXX
20XX年 X月 X日
目录
摘要-----------------------------------------------------------3
1. 设计目的---------------------------------------------------4
2. 功能描述---------------------------------------------------4
2.1.总体功能设计---------------------------------------------------4
2.2.各模块功能------------------------------------------------------4
3. 总体设计---------------------------------------------------5
3.1模块流程图-----------------------------------------------------5
3.2数据结构设计---------------------------------------------------5
3.3函数功能描述---------------------------------------------------6
4. 程序实现----------------------------------------------------6
4.1详细模块介绍---------------------------------------------------6
4.2源代码------------------------------------------------------------13
4.3运行结果--------------------------------------21
学生信息管理系统
(摘要)
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
系统以菜单方式工作
学生信息录入功能(学生信息用文件保存)---输入
学生信息浏览功能---输出
查询、排序功能---算法
按学号查询
按姓名查询
学生信息的删除与修改(可选项)
1、设计目的
本程序旨在训练读者的基本编程能力,了解管理信息系统开发流程,熟悉C语言的编程环境.我们主要设计一个能实现学生信息管理系统,让它来运行和管理学生信息。它在现实生活中运用方便的、管理方便。它能输入学生学号、年龄、性别、出生年月、地址电话E-mail。系统以菜单的方式进行工作,进入子菜单后,还可以返回主菜单。在子菜单中的各种操作都有中文说明,操作简单、易懂。只要我们正确的操作系统,系统就无异常现在,当然系统也能对一些基本的错误做出提示,并能让使用者重新进行操作。 对各个操作的成功,如:添加学生信息、修改学生信息、删除学 生信息,系统都输出“…….的成功”的字样。系统对删除和修改前,还进行“确定”和“取消”。系统对不存在的学号和姓名系统能判断是否存在。对已存在的学号,操作者不能添加和这个学号一样的学生信息,同时系统还提示已有此学号。对于修改、删除和查询,系统遇到不存在的学生能提示没有这个信息。
2、功能描述
2.1.总体功能设计:
学生信息管理系统存放了每个学生的学号、姓名、性别、年龄、出生年月日、地址、 电话号码、E-mail信息地数据库。每个人的信息定义在一个结构体变量中。其结构如下: 系统通过显示程序、添加程序、查询程序、删除程序、修改程序、排序程序来实现学生信息管理系统的显示功能、添加加功能、查询功能、删除功能、修改功能、排序功能。各个功能的调用通过主函数中的switch语句来实现。
2.2.各模块功能:
显示模块:通过设计一个模块,来实现学生信息的显示。以便于浏览学生的信息。
添加模块:通过设计一个模块,当要加入新的学生的信息的时候,来实现新学生信息的加入。
修改模块:通过设计一个模块,当某个人的信息发生变化的时候,可以通过修改模块来进行修改。修改模块时一具有多级子菜单的摸块。使用十分的方便、灵活。
查询模块:通过设计一个模块,这个模块可以按学生的学号、姓名来查询学生所有的信息,并显示学生的所有信息,以便查询者阅读。
删除模块: 通过设计一个模块,当输入一个学生的学号或者姓名的时候,可以通过这个模块,将输入学号或者姓名的学生的所有信息从数据库中删除出去。以后,这个学生的信息将不再会出现再数据库中。
排序模块: 通过设计一个模块,来实现数据库的信息按某项成员名的伸序或者降序排列。这个模块提供了按学号来实现排序,使浏览者一目了然。
3、总体设计
3.1模块流程图
学生信息管理系统
添加信息模块
退出系统
查询信息模块
删除信息模块
显示信息模块
修改信息模块
3.2数据结构设计
1.头文件说明
#include<stdio.h>
2.函数的编写
定义结构类型;
定义全局变量;
定义、编写记录(数据)输入函数;
定义、编写记录(数据)显示函数;
定义、编写记录(数据)增加函数;
定义、编写记录(数据)删除函数;
定义、编写记录(数据)修改函数;
定义、编写记录(数据)统计函数;
定义、编写记录(数据)查找函数;
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
}stu[100]; //结构体名
3.3函数功能描述
函数名
功能
main()
主函数
tianjia()
添加信息
xiugai()
修改信息
quanbu()
显示全部信息
chakan()
查找信息
looknum()
判断是否已有要添加信息
shanchu()
删除信息
4、程序实现
4.1详细模块介绍
1.添加信息模块。该模块作用是,添加学生的信息,包括学号,姓名,性别,年龄,出生日期,住址,手机号,e-mail几方面的信息。添加学生学号在100以内。
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(num);
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);
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",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);
}
2.显示信息模块。该模块作用是,按学号顺序显示全部学生的信息,包括学号,姓名,性别,年龄,出生日期,住址,手机号,e-mail几方面的信息。
quanbu()/*输出全部信息函数*/
{int i;
FILE *fp;
fp=fopen("stu2.txt","rb");
printf("\t\t全部学生信息如下\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);
}
3.修改信息模块。输入要修改的学生学号,先判断这个学号是否存在。如果存在,系统就确认修改信息,并重新输入信息。如果不存在,系统提示输入错误,返回菜单。
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手机号 \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)
{
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请输入出生日期:");
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);
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.删除信息模块。输入要删除的学生学号,先判断这个学号是否存在。如果存在,系统就确认删除错误的信息。如果不存在,系统提示输入错误,返回菜单。
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("\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※※※※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※※※※1.继续删除\n");
printf("\t※※※※2.退出删除\n");
scanf("%d",&y);
switch(y)
{case 1:goto L;
default:break;}
}
fclose(fp);
}
5.查询信息模块。输入要查询的学生的姓名或学号,先判断这个学号是否存在。如果该姓名或学号存在,系统就显示相关信息的信息。如果不存在,系统提示输入错误,返回菜单。
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※※※※请输入查看的学号:");
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[num-1].bro,stu[num-1].add,stu[num-1].phone,stu[num-1].em);
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※※※※请输入查看的姓名:");
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].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);
switch(z)
{case 1:goto U;
default:break;}
} }
fclose(fp);
}
6.退出系统模块。该模块是一个主函数,输入“6”系统退出。
main()/*主函数*/
{ int a;
printf("\n\t ************************欢迎使用*********************\n\n"); printf("***********************************************************************\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("\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;
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<stdio.h>
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
}stu[100]; //结构体名
int looknum(int num) /*查看是否有这个学号的函数*/
{ int i;
FILE *fp;
fp=fopen("stu2.txt","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 的学号:");
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("\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",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全部学生信息如下\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()/*修改信息函数*/
{
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\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+");
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请输入住址:");
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
{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("stu2.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\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===========<*删除信息成功*>=============\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);
}
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※※※※请输入查看的学号:");
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
展开阅读全文