学生信息管理系统.docx
- 文档编号:11402411
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:25
- 大小:112.94KB
学生信息管理系统.docx
《学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
学生信息管理系统
实训报告
项目名称:
学生信息管理系统
专业:
姓名:
班级:
学号:
完成日期:
一、需求分析
说明程序设计的主要任务,强调程序要做什么。
报告需明确指出:
1、程序所具有的功能;
根据学生成绩的需要,建立一个“学生信息管理系统”,系统具有查询、修改、删除、排序、打印等基本功能,以方便对成绩的各项管理操作。
本程序是由C语言的基本单位一函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。
本程序分为7个模块,分别为创建学生资料;添加学生的资料;查询学生的成绩;修改学生的资料;删除学生的资料;对学生的资料进行排序;统计学生的成绩。
本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。
本程序的使用特别方便,每做完一个模块,下面都有提示信息。
2、输入的形式和输入值的范围;
学生基本资料管理功能。
录入学生的姓名、学号、性别、年龄、籍贯、健康状况、教育程度、成绩等信息。
姓名(name):
char字符型;
学号(num):
long长整型;
性别(sex):
char字符型;
年龄(age):
int整型;
籍贯(addr):
char字符型;
成绩(score):
int整型;
健康状况(health):
char字符型;
教育程度(edu):
char字符型。
其中,可以一次输入20个学生的信息,性别只有男与女,籍贯是30个字符,健康状况是20个字符,教育程度20个字符。
3、输出的内容和形式。
输出的内容包括学生的姓名、学号、性别、年龄、籍贯、成绩、健康状况、教育程度,并以学号或成绩排序的形式输出。
二、概要设计
对程序中用到的所有全局数据类型进行定义、说明主程序及各程序模块、各程序模块之间的调用关系。
1、数据类型定义
姓名(name):
char字符型;
学号(num):
long长整型;
性别(sex):
char字符型;
年龄(age):
int整型;
籍贯(addr):
char字符型;
成绩(score):
int整型;
健康状况(health):
char字符型;
教育程度(edu):
char字符型。
2、程序流程
学生基本信息管理模块
(1)能从后台实现添加学生。
输入学生基本信息时,输入学号后及判断有无该学生,若有则不用输入并显示出该学生的学号、姓名等基本信息;无该学生的信息则输入。
(2)管理员能从后台查询、修改学生的基本信息。
查询时可以多条件查询,条件有姓名、学号。
可分页显示学生信息,并可选择编辑修改学生的信息。
(3)学生能从前台输入学号查询自己的基本信息。
3、模块\函数层次关系
A、创建模块:
此模块可以连续输入20个学生的资料,每输入完一个学生的信息会提示“是否继续录入?
(y/n):
”,若继续输入则“y”,否则“n”,并把输入的信息保存到student.txt文档中。
B、查询模块:
此模块中使用者可以用两种方式查询学生成绩。
分别为
(1)按学号查询
(2)按姓名查询。
在这里以按学号查询为例:
先选择按学号查询,输入要查询的学生的学号,系统确认此学号在student.txt存在后读取信息并在屏幕上输出学生记录。
C、修改模块:
输入要修改学生的姓名,若有此学生的信息,则按照提示输入学号、性别、年龄、籍贯、成绩、健康状况、教育程度;若没有此学生的信息,则提示“没有姓名…的学生”。
修改完毕后提示“修改成功!
”,按任意键则退出此模块。
D、删除模块:
此模块中用到的删除原理为覆盖要删除的学生的资料。
过程简述,先输入要删除的学生的姓名,系统找到此学生的信息后,会出现此学生的所有信息,提示“确定删除该学生信息?
(y/n):
”,若“y”,则提示“删除成功!
”。
若无此学生的信息则提示“没有姓名为…的学生”。
E、排序模块:
此模块可以使用两种方式对学生进行排序。
分别为
(1)按学号排序
(2)按分数排序。
F、打印模块:
若有学生信息,则打印所有学生的信息;否则无法打印。
三、详细设计
完成概要设计中所有模块的编程和调试。
程序代码如下:
#include
#include
#include
#include
#defineLENsizeof(structstudent)
typedefstructstudent
{
charname[20];
longnum;
charsex[5];
intage;
charaddr[30];
intscore;
charhealth[20];
charedu[20];
structstudent*next;
}STI;
voidinput();
STI*open();
voidnumfind(STI*);
voidnamefind(STI*);
voidmodify(STI*);
voiddelet(STI*);
voidnumsort(STI*);
voidscoresort(STI*);
voidprint(STI*);
voidrenew(STI*);
intn;
voidmain()
{
STI*fhead;
intchoice,flag=1;
chars;
while(flag)
{
printf("\n****************************************\n");
printf("欢迎使用学生信息管理系统!
");
printf("\n");
printf("****************************************\n\n");
printf(">>>主窗口菜单<<<\n\n");
printf("1.录入学生信息\n\n");
printf("2.查找学生信息\n\n");
printf("3.修改学生信息\n\n");
printf("4.删除学生信息\n\n");
printf("5.排序学生信息\n\n");
printf("6.打印学生信息\n\n");
printf("0.退出\n");
printf("\n请选择:
");
scanf("%d",&choice);
getchar();
switch(choice)
{
case0:
exit(0);
case1:
input();
break;
case2:
system("cls");
printf("\na.按学号查找\n\n");
printf("b.按姓名查找\n");
printf("\n请选择:
");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numfind(fhead);
elseif(s=='b')
namefind(fhead);
else
printf("\n输入错误\n");
break;
case3:
fhead=open();
modify(fhead);
break;
case4:
fhead=open();
delet(fhead);
break;
case5:
system("cls");
printf("\na.按学号排序\n\n");
printf("b.按成绩排序\n");
printf("\n请选择:
");
scanf("%c",&s);
getchar();
fhead=open();
if(s=='a')
numsort(fhead);
elseif(s=='b')
scoresort(fhead);
else
printf("\n输入错误\n");
break;
case6:
fhead=open();
print(fhead);
break;
default:
printf("\n输入错误!
\n");
}
printf("\n按任意键返回主菜单!
");
getchar();
system("cls");
}
}
voidinput()//录入学生信息
{
intflag=1;
chars;
FILE*fp;
STI*p,*p1,*p2,*head;
head=p1=p2=(STI*)malloc(LEN);
while(flag==1)
{
system("cls");
printf("\n姓名:
");
scanf("%s",&p1->name);
printf("\n学号:
");
scanf("%ld",&p1->num);
printf("\n性别:
");
scanf("%s",&p1->sex);
printf("\n年龄:
");
scanf("%d",&p1->age);
printf("\n地址:
");
scanf("%s",&p1->addr);
printf("\n成绩:
");
scanf("%d",&p1->score);
printf("\n健康状况:
");
scanf("%s",&p1->health);
printf("\n教育程度:
");
scanf("%s",&p1->edu);
getchar();
printf("\n是否继续录入?
(y/n):
");
scanf("%s",&s);
getchar();
if(s=='y')
{
p2=p1;
p1=(STI*)malloc(LEN);
p2->next=p1;
}
else
flag=0;
}
p1->next=NULL;
p=head;
if((fp=fopen("student.txt","ab"))==NULL)
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("无法打开文件!
\n");
exit(0);
}
while(p!
=NULL)
{
if(fwrite(p,LEN,1,fp)!
=1)
printf("无法保存!
\n");
p=p->next;
}
fclose(fp);
printf("\n录入成功!
\n");
}
STI*open(void)//查找学生信息
{
STI*fhead,*p1,*p2;
FILE*fp;
fhead=NULL;
p1=p2=(STI*)malloc(LEN);
if((fp=fopen("student.txt","rb"))!
=NULL)
{
fread(p1,LEN,1,fp);
n=0;
while(!
feof(fp))
{
n=n+1;
if(n==1)
fhead=p1;
else
p2->next=p1;
p2=p1;
p1=(STI*)malloc(LEN);
fread(p1,LEN,1,fp);
}
p2->next=NULL;
}
else
fp=fopen("student.txt","wb");
fclose(fp);
return(fhead);
}
voidnamefind(STI*head)//姓名查询模块
{
inta=0;
charfindname[20];
STI*p;
p=head;
printf("\n请输入姓名:
");
gets(findname);
while(p!
=NULL)
{
if(strcmp(findname,p->name)==0)
{
a=a+1;
if(a==1)
printf("\n姓名学号性别年龄地址成绩健康状况教育程度\n\n");
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p->name,p->num,p->sex,p->age,p->addr,p->score,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n没有姓名%s的学生\n",findname);
}
voidnumfind(STI*head)//学号查询模块
{
intfindnum=0,a=0;
STI*p;
p=head;
printf("\n请输入学号:
");
scanf("%ld",&findnum);
getchar();
while(p!
=NULL)
{
if(findnum==p->num)
{
a=a+1;
printf("\n姓名学号性别年龄地址成绩健康状况教育程度\n\n");
printf("%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n",p->name,p->num,p->sex,p->age,p->addr,p->score,p->health,p->edu);
}
p=p->next;
}
if(a==0)
printf("\n没有学号为%ld的学生\n",findnum);
}
voidmodify(STI*head)//修改学生信息
{
STI*p;
inta=0;
charfindname[20];
p=head;
system("cls");
printf("\n请输入姓名:
");
gets(findname);
while(p!
=NULL)
{
if(strcmp(findname,p->name)==0)
{
a=a+1;
printf("\n姓名学号性别年龄地址成绩健康状况教育程度\n\n");
printf("%-8s%-8ld%-8s%-8d%-10s%-14d%-14s%-14s\n",p->name,p->num,p->sex,p->age,p->addr,p->score,p->health,p->edu);
printf("\n请修改!
\n");
printf("\n姓名:
");scanf("%s",&p->name);
printf("\n学号:
");scanf("%ld",&p->num);getchar();
printf("\n性别:
");scanf("%s",&p->sex);
printf("\n年龄:
");scanf("%d",&p->age);
printf("\n地址:
");scanf("%s",&p->addr);
printf("\n成绩:
");scanf("%d",&p->score);
printf("\n健康状况:
");scanf("%s",&p->health);
printf("\n教育状况:
");scanf("%s",&p->edu);getchar();
printf("\n修改成功!
\n");
}
p=p->next;
}
if(a==0)
printf("\n没有姓名%s的学生\n",findname);
else
renew(head);
}
voiddelet(STI*head)//删除学生信息
{
inta=0;
charc,findname[20];
STI*p1,*p2;
p1=p2=head;
system("cls");
printf("\n请输入姓名:
");
scanf("%s",findname);
getchar();
while(p1!
=NULL)
{
if(strcmp(findname,p1->name)==0)
{
a=a+1;
printf("\n姓名学号性别年龄地址成绩健康状况教育程度\n\n");
printf("%-8s%-8ld%-8s%-8d%-10s%-14d%-14s%-14s\n",p1->name,p1->num,p1->sex,p1->age,p1->addr,p1->score,p1->health,p1->edu);
printf("\n确定删除该学生信息?
(y/n):
");
c=getchar();
getchar();
if(c=='y')
{
if(p1==head)
p1=p2=head=p1->next;
else
{
p2->next=p1->next;free(p1);p1=p2;
}
printf("\n删除成功!
\n");
}
}
p2=p1;
if(p1!
=NULL)
p1=p1->next;
else;
}
if(a==0)
printf("\n没有姓名为%s的学生\n",findname);
else
renew(head);
}
voidrenew(STI*head)
{
FILE*fp;
structstudent*p;
p=head;
if((fp=fopen("student.txt","web"))==NULL)
{
printf("无法打开文件!
\n");
exit(0);
}
while(p!
=NULL)
{
if(fwrite(p,LEN,1,fp)!
=1)
printf("无法保存!
\n");
p=p->next;
}
fclose(fp);
}
voidprint(STI*head)//打印学生信息
{
STI*p;
p=head;
system("cls");
if(p==NULL)
printf("\n无任何信息!
\n");
else
{
printf("\n姓名学号性别年龄地址成绩健康状况教育程度\n\n");
do
{
printf("%-8s%-8ld%-8s%-8d%-10s%-14d%-14s%-14s\n\n",p->name,p->num,p->sex,p->age,p->addr,p->score,p->health,p->edu);
p=p->next;
}while(p!
=NULL);
}
}
voidnumsort(STI*head)//按学号排序模块
{
inti;
STI*p1,*p2,*p3,*end=NULL;
p1=p2=p3=head;
if(head!
=NULL&&head->next!
=NULL)
for(i=1;i { p1=p1->next; while(p1! =end) if(p1->num { p2->next=p1->next; p1->next=p2; if(p2==p3) head=p1; else p3->next=p1; p3=p1; p1=p2->next; } else { p3=p2;p2=p1;p1=p1->next; } end=p2; p1=p2=p3=head; } renew(head); printf("排序已完成,请从打印中查看排序后的结果! "); } voidscoresort(STI*head)//按分数排序模块 { inti; STI*p1,*p2,*p3,*end=NULL; p1=p2=p3=head; if(head! =NULL&&head->next! =NULL) for(i=1;i { p1=p1->next; while(p1! =end) if(p1->score { p2->next=p1->next; p1->next=p2; if(p2==p3) head=p1; else p3->next=p1; p3=p1; p1=p2->next; } else { p3=p2;p2=p1;p1=p1->next; } end=p2; p1=p2=p3=head; } renew(head); printf("排序已完成,请从打印中查看排序后的结果! "); } 四、调试分析 调试分析应包括: 1、调试过程中遇到哪些问题,这些问题是如何解决的; 此程序的不足之处在学生基本信息方面还不够完善,另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善。 改进方法: 可以在学生基本信息的结构体中添加更多的学生信息,使得学生信息更加完善,此外,还可以在编程时加一些必要的提示语,用printf(“”);语句直接可输入。 2、算法的效率和改进设想; (1)查找学生信息 问题: 若没有此学生信息,则直接返回主菜单 改进设想: 若此学生不存在在,则应提示是继续查找学生信息,还是退出输入。 (2)删除学生信息: 与查找学生信息的改进方法相同。 (3)添加将所有记录写入文件的功能,这样可以把学生信息存入文件并保存下来。 五、测试结果 列出测试结果。 测试数据应该完整严格,包括正确的输入输出结果,及其含有错误的输入输出结果。 1.录入学生信息 测试数据: 输入学生信息 测试结果: 性别与年龄一起显示,无法输入性别 原因: 学号数据类型是long长整型,而输入的是char字符型,不符合要求 2、排序学生信息 测试数据: 选择a,按学号排序 测试结果: 排序后需在打印功能中出现结果,排序成功。 六、操作简介 运行后,主界面如下: 选择1、录入学生信息 测试数据: 输入zhangsan学生的信息 测试结果: 程序运行正常,录入成功。 选择2、查找学生信息 测试数据: 选择a,按学号查询: 测试结果: 程序运行正常,查询成功。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)