学生信息管理系统设计.docx
《学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统设计.docx(31页珍藏版)》请在冰豆网上搜索。
学生信息管理系统设计
中南民族大学管理学院
学生课程设计报告
课程名称:
C程序设计语言
选题名称:
学生信息管理系统设计
年 级:
2010
专 业:
信息管理与信息系统
学 号:
姓 名:
指导教师:
完成地点:
管理学院综合实验室
完成日期:
2011年12月
2011学年至2012学年度第1学期
Ø题目描述:
学生信息管理系统设计
●基本要求:
试设计一学生信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作;
(2)学生信息录入功能(学生信息用文件保存)---输入;
(3)学生信息浏览功能---输出;
(4)查询、排序功能---算法;
a)按学号查询;
b)按姓名查询;
(5)学生信息的删除与修改(可选项)。
●创新要求:
在基本要求达到后,可进行创新设计。
●信息描述:
学生信息包括:
学号、姓名、年龄、性别、出生年月、地址、电话、E-mail等。
Ø问题分析:
(1)本问题是设计学生信息管理系统,主要用到结构体类型和文件;
(2)设计的第一个要求为“系统以菜单方式工作”这就要求程序中要使用大量的循环结
构,已完成设计要求。
(3)学生信息的录入要求用文件保存,这里就会涉及C语言中文件的使用。
(4)系统的其它功能每一项都可以写一函数,通过函数的调用实现设计要求。
Ø系统设计:
(1)程序总体结构:
程序有:
主函数voidmain()
打开文件函数intopen()
保存函数voidsave(intn)
输入学生信息函数voidinput()
输出学生信息函数voidoutout()
查询总函数voidsearch()
按学号查询函数voidsearch_num()
按姓名查询函数voidsearch_name()
排序总函数voidorder()
按学号排序函数voidorder_num()
按姓名排序函数voidorder_name()
按出生年月排序函数voidorder_brith()
修改函数voidmodity()
删除函数voiddel()组成。
总结构图:
(2)重要数据的数据结构设计:
a)结构体类型structstudent中定义的所有类型为字符数组,这样做是为了操作方
便,因函数中不涉及数据计算,全部数据定义为字符型可防止编写程序时出错。
b)在打开文件函数voidopenn()中,函数会返回一数值,该数值为保存在文件中
学生信息的个数,返回该值是为了调用该函数的函数使用学生数这一数值,避免了定义全局变量,降低了出错的可能,是程序更加清晰。
c)在保存函数voidsave(intn)中,函数要求传入一数值,该数值为学生信息的
个数,要求传入该数值是因为在执行删除等函数后,学生信息的个数会发生改变,传入一数值告诉保存函数要保存学生信息个数,使程序有效地执行。
d)在输入函数voidinput()函数中,函数没有调用打开文件函数voidopenn()和保存函数voidsave(intn),因为它输入学生信息包括新建文件的情况,即第一次输入学生信息,因打开文件函数和保存函数都是针对已存在文件的发挥作用,因此输入函数编写了自己的打开文件和保存文件函数。
e)在其它的函数中,函数都是既无返回值又无传入值的类型,这样避免了传值时造成的错误与不便,使程序清晰、简单。
f)其它数据结构的设计都比较基本,很容易明白,在这里就不都写了。
(3)函数设计:
#include
#include
#include
structstudent/*定义结构体类型数据类型全为字符型*/
{
charnum[9],name[20];
charage[3];
charsex[2];
charbrith[9],add[16],phone[12],Email[18];
};
typedefstructstudentSTU;
STUstu[100];
voidinput();/*声明输入函数*/
voidoutput();/*声明输出函数*/
voidsearch();/*声明查询函数*/
voidsearch_num();/*声明按学号查询函数*/
voidsearch_name();/*声明按姓名查询函数*/
voidorder();/*声明排序函数*/
voidorder_num();/*声明按学号查询函数*/
voidorder_name();/*声明按姓名查询函数*/
voidorder_brith();/*声明按出生日期查询函数*/
voidmodity();/*声明按出生日期查询函数*/
voiddel();/*声明删除函数*/
voidsave(intn);/*声明保存函数*/
intopenn();/*声明打开文件函数*/
voidmain()/*主函数*/
{
chara;/*定义字符数据用于选择选项*/
intflag=0;/*定义整型数据用于结束while循环*/
while
(1)
{
printf("\n(AInputstudentsinformation.\n");
printf("(BOutputstudentinformation.\n");
printf("(CSearchstudentsinformation.\n");
printf("(DOrderstudentsinformation.\n");
printf("(EModitystudentsinformation.\n");
printf("(FDeletestudentsinformation.\n");/*输出选项列表*/
printf("(GExitprogram.\n");
printf("Inputyouchoice:
");
scanf("%c",&a);
fflush(stdin);
switch(a)/*调用函数完成各种功能*/
{
case'A':
input();break;
case'B':
output();break;
case'C':
search();break;
case'D':
order();break;
case'E':
modity();break;
case'F':
del();break;
case'G':
flag=1;break;
default:
printf("Error!
\n");break;
}
if(flag)break;
}
}
intopenn()/*定义打开文件函数,并返回文件中学生个数*/
{
inti;
FILE*fp;
if((fp=fopen("stud.txt","r"))==NULL)
{
printf("Cannotopentisfile.\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
fread(&stu[i],sizeof(STU),1,fp);
fclose(fp);
return(i-1);
}
voidsave(intn)/*定义保存函数*/
{
FILE*fp;
inti;
if((fp=fopen("stud.txt","w"))==NULL)
{
printf("Savefunctioncannotopenthisfile!
\n");
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(STU),1,fp)!
=1)
printf("Fileinputerror!
\n");
fclose(fp);
}
voidinput()/*定义输入函数*/
{
inti,m;
FILE*fp;
printf("\nHowmanystudentinformationyouwenttoputin:
");
scanf("%d",&m);
fflush(stdin);
for(i=0;i{
printf("Inputthe%dstudentinformation.\n",i+1);
printf("Inputthestudent'snum:
\n");
gets(stu[i].num);
fflush(stdin);
printf("Inputthestudent'sname:
\n");
gets(stu[i].name);
fflush(stdin);
printf("Inputthestudent'sage:
\n");
gets(stu[i].age);
fflush(stdin);
printf("Inputthestudent'ssex:
(MorF)\n");
gets(stu[i].sex);
fflush(stdin);
printf("Inputthestudent'sbrithday:
\n");
gets(stu[i].brith);
fflush(stdin);
printf("Inputthestudent'saddress:
\n");
gets(stu[i].add);
fflush(stdin);
printf("Inputthestudent'sphone:
\n");
gets(stu[i].phone);
fflush(stdin);
printf("Inputthestudent'sEmail:
\n");
gets(stu[i].Email);
fflush(stdin);
}
if((fp=fopen("stud.txt","a"))==NULL)/*打开或新建文件*/
{
printf("Cannotopenthefile!
\n");
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(STU),1,fp)!
=1)
printf("Fileinputerror!
\n");
fclose(fp);
printf("Savestudentsinformationsuccess!
\n");
printf("Pressanykeytocomeback!
\n");
getch();
}
voidoutput()/*定义输出函数*/
{
inti,n;
n=openn();/*调用打开文件函数并将学生信息个数赋给n*/
printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name","Age",
"Sex","Brithday","address","Phone","E-mail");
for(i=0;i{
printf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
}
printf("\nPressanykeytocomeback!
\n");
getch();
}
voidsearch()/*定义查询主函数类型与主函数相同*/
{
chara;
intflag=0;
while
(1)
{
printf("\n(ASearchbynumber.\n");
printf("(BSearchbyname.\n");
printf("(CReturnmainmenu.\n");
printf("Inputyouchoice:
");
scanf("%c",&a);
fflush(stdin);
switch(a)
{
case'A':
search_num();break;
case'B':
search_name();break;
case'C':
flag=1;break;
default:
printf("Error!
\n");break;
}
if(flag)break;
}
}
voidsearch_num()/*定义按学号查询函数*/
{
intn,i,flag=0;
charnum[20];
n=openn();
printf("\nThestudent'snumberyouwanttosearch:
\n");
scanf("%s",num);
printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name","Age",
"Sex","Brithday","address","Phone","E-mail");
for(i=0;iif(strcmp(stu[i].num,num)==0)
{
printf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
flag=1;
}
if(flag==0)
printf("Can'tfindthestudent!
\n");
printf("\nPressanykeytocomeback!
\n");
getch();
fflush(stdin);
}
voidsearch_name()/*定义按姓名查询函数*/
{
intn,i,flag=0;
charname[20];
n=openn();
printf("\nThestudent'snameyouwanttosearch:
\n");
scanf("%s",name);
printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name","Age",
"Sex","Brithday","address","Phone","E-mail");
for(i=0;iif(strcmp(stu[i].name,name)==0)
{
printf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
flag=1;
}
if(flag==0);
printf("Can'tfindthestudent!
\n");
printf("\nPressanykeytocomeback!
\n");
getch();
fflush(stdin);
}
voidorder()/*定义排序主函数*/
{
chara;
intflag=0;
while
(1)
{
printf("\n(AOrderbynumber.\n");
printf("(BOrderbyname.\n");
printf("(COrderbybrithday.\n");
printf("(DReturnmainmenu.\n");
printf("Inputyouchoice:
");
scanf("%c",&a);
fflush(stdin);
switch(a)
{
case'A':
order_num();break;
case'B':
order_name();break;
case'C':
order_brith();break;
case'D':
flag=1;break;
default:
printf("Error!
\n");break;
}
if(flag)break;
}
}
voidorder_num()/*定义按学号排序函数*/
{
inti,j,n;
chara;
STUtemp;
n=openn();
printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name","Age",
"Sex","Brithday","address","Phone","E-mail");
for(i=0;i{
for(j=i+1;jif(strcmp(stu[i].num,stu[j].num)>0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
for(i=0;iprintf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
printf("\nPressanykeytocoutine.\n");
getch();
printf("DOyouwanttosave?
\n");
printf("Y)SaveN)Notsave.\n");
printf("Yourchoice:
");
scanf("%c",&a);
fflush(stdin);
if(a=='Y')
{
save(n);
printf("Savesuccess!
\n");
}
elseprintf("Exit!
\n");
printf("\nPressanyketocomeback!
\n");
getch();
}
voidorder_name()/*定义按姓名排序函数*/
{
inti,j,n;
chara;
STUtemp;
n=openn();
printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name","Age",
"Sex","Brithday","address","Phone","E-mail");
for(i=0;i{
for(j=i+1;jif(strcmp(stu[i].name,stu[j].name)>0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
for(i=0;iprintf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
printf("\nPressanykeytocoutine.\n");
getch();
printf("DOyouwanttosave?
\n");
printf("Y)SaveN)Notsave.\n");
printf("Yourchoice:
");
scanf("%c",&a);
fflush(stdin);
if(a=='Y')
{
save(n);
printf("Savesuccess!
\n");
}
elseprintf("Exit!
\n");
printf("\nPressanyketocomeback!
\n");
getch();
}
voidorder_brith()/*定义按出生年月排序函数*/
{
inti,j,n;
chara;
STUtemp;
n=openn();printf("\n%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n","Nnmber","Name",
"Age","Sex","Brithday","address","Phone","E-mail");
for(i=0;i{
for(j=i+1;jif(strcmp(stu[i].brith,stu[j].brith)>0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
for(i=0;iprintf("%-9s%-12s%-4s%-4s%-9s%-10s%-12s%-18s\n",stu[i].num,stu[i].name,
stu[i].age,stu[i].sex,stu[i].brith,stu[i].add,stu[i].phone,stu[i].Email);
printf("\nPressanykeytocoutine.\n");
getch();
printf("DOyouwanttosave?
\n");
printf("Y)SaveN)Notsave.\n");
printf("Yourchoice:
");
scanf("%c",&a);
fflush(stdin);
if(a=='Y')
{
save(n);
printf("Savesuccess!
\n");
}
elseprintf("Exit!
\n");
printf("\nPressanyketocomeback!
\n");
getch();
}
voidmodity()/*定义修改函数*/
{
inti,n,m,flag,flag1=0;
cha