结构化程序设计 学生成绩管理系统.docx
- 文档编号:5963502
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:37
- 大小:263.92KB
结构化程序设计 学生成绩管理系统.docx
《结构化程序设计 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《结构化程序设计 学生成绩管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
结构化程序设计学生成绩管理系统
福建工程学院计算机与信息科学系
实验报告
2011–2012学年第2学期任课老师:
章静
课程名称
结构化程序设计
班级
计1002
座号
3100305126
姓名
王文杰
实验题目
学生成绩管理系统
实验时间
实验开始日期:
2012年2月16日
报告提交日期:
2012年2月29日
实验目的、要求
1.该实验的课内学时是4个课时。
2.程序完成后应该完成如下基本功能:
1)用自定义结构体typedefstruct设计该软件的数据结构;
2)用数组或指针链表将所有学生的数据按照学号顺序链接起来;
3)程序能够按照学号顺序输入学生的三门成绩,并计算平均成绩和总成绩。
4)程序能够显示已经输入的指定学号的学生成绩以及平均成绩和总成绩。
5)程序能够按要求显示指定分数段的学生成绩以及平均成绩和总成绩。
6)能够统计班级总人数、班级平均成绩。
7)能够增加和删除指定学生的成绩。
8)按照指定的要求以及顺序(升序或降序)显示学生成绩以及平均成绩和总成绩。
3.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:
1)能够输入的数据长期存储在文件中,再次运行程序时从文件中读取数据,无须重复输入。
2)在程序的提示语言清晰明确,界面美观并且适用。
实验步骤与内容
1、主要设计思想:
1)程序刚开始初始化数据,并从文件data.txt中读入学生、课程、成绩等信息存入链表
2)然后出现登陆界面,学生可直接登陆;教师登陆需输入密码。
学生登陆只能查看数据,教师不仅可以登陆还是修改。
3)查看部分分为查看班级成绩信息和查看个人成绩信息,分别有查看个人成绩、查看平均成绩、查看总成绩、查看指定分数段内的学生成绩、升降序排列班级成绩表和查看个人成绩、查看平均成绩和查看个人总成绩等。
4)操作部分包括对数据的增添、修改和删除,操作完毕后保存到文件中。
5)程序框图如下:
2、主要数据结构及其解释
程序的主要数据结构是Student结构体,包括以下属性:
学号ID、班级Class、姓名Name、成绩1Score1、成绩2Score2、成绩3Score以及指向下一个数据的指针Next。
3、模块关系图:
4、所有函数的简要说明:
intLogin();//登陆函数,分为教师登陆和学生登录,教师登陆需要输入密码,输入密码时用无回显输入,同时打印一个‘*’;学生登陆则不需要输入密码。
voidMenu(intlogin);//菜单函数,根据登陆函数登陆完的返回值判断是学生登录还是教师登陆,根据不同的登陆显示不同的菜单。
voidSelList(intlogin);//查询列表函数,当教师选择查询或者学生登录时显示。
voidAdd();//教师登陆时的添加函数,添加一个学生信息。
voidUpd();//教师登陆时的修改函数,修改学生的信息。
voidDel();//教师登陆时的删除函数,删除学生的信息。
voidSave();//保存函数,将链表保存到文件中。
增添、修改、删除后调用。
voidInit();//初始化函数,导入文件中的数据到链表中。
voidDispAll(intlogin);//打印全班同学的成绩信息。
voidDispAsc();//按升序打印出全班同学的成绩信息
voidDispFT(intlogin);//打印出固定分数段的学生成绩信息
voidExcg(Student*t1,Student*t2,Student*t3,Student*t4);//排序用的交换两个节点函数
voidClassList(intlogin);//按班级查询成绩时的菜单,选择打印成绩的方法。
voidPerList(intlogin);//打印固定学号的学生的成绩
voidprint(Student*p);//输出一个人成绩的函数。
5、所有源代码:
#include
#include
#include
typedefstructStudentNode
{
intSID;
charSName[20];
intCID;
floatScore1;
floatScore2;
floatScore3;
structStudentNode*Next;
}Student;
intLogin();
voidMenu(intlogin);
voidSelList(intlogin);
voidAdd();
voidUpd();
voidDel();
voidSave();
voidInit();
voidDispAll(intlogin);
voidDispAsc();
voidDispFT(intlogin);
voidExcg(Student*t1,Student*t2,Student*t3,Student*t4);
voidClassList(intlogin);
voidPerList(intlogin);
voidprint(Student*p);
Student*S;
intmain()
{
intlogin=0;
Init();
login=Login();
Menu(login);
return0;
}
voidInit()
{
S=(Student*)malloc(sizeof(Student));
S->Next=NULL;
chartemp;
Student*p,*r;
r=S;
freopen("Data.txt","r",stdin);
while(scanf("%c",&temp)!
=EOF)
{
getchar();
p=(Student*)malloc(sizeof(Student));
scanf("%d",&p->SID);
scanf("%s",p->SName);
scanf("%d",&p->CID);
scanf("%f",&p->Score1);
scanf("%f",&p->Score2);
scanf("%f",&p->Score3);
p->Next=NULL;
r->Next=p;
r=r->Next;
}
fclose(stdin);
freopen("CON","r",stdin);
}
voidSave()
{
Student*S1,*S2;
S1=S->Next;
while(S1)
{
if(S1->Next&&(S1->Next->CID>9999||S1->Next->CID<1000))S1->Next=NULL;
S1=S1->Next;
}
Student*p,*q,*t,*k;
t=S;
p=S->Next;
while(p->Next)
{
k=p;
q=p->Next;
while(q)
{
if(p->SID>q->SID)
{
Excg(t,k,p,q);
p=S->Next;q=p->Next;t=S;k=p;
}
q=q->Next;
k=k->Next;
}
p=p->Next;
t=t->Next;
}
Student*r;
r=S->Next;
freopen("Data.txt","w",stdout);
while(r)
{
printf("-\n");
printf("%d\n",r->SID);
printf("%s\n",r->SName);
printf("%d\n",r->CID);
printf("%.1f\n",r->Score1);
printf("%.1f\n",r->Score2);
printf("%.1f\n",r->Score3);
r=r->Next;
}
fclose(stdout);
freopen("CON","w",stdout);
printf("已保存!
");
}
intLogin()
{
intlogin;
while
(1)
{
printf("┏==========================┓\n");
printf("┃欢迎使用学生成绩管理系统!
┃\n");
printf("┣==========================┫\n");
printf("┃请选择身份┃\n");
printf("┣━━━━━━━━━━━━━┫\n");
printf("┃┃\n");
printf("┃1.教师登入┃\n");
printf("┃┃\n");
printf("┃2.学生登入┃\n");
printf("┃┃\n");
printf("┃0.退出┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━┛\n");
printf("请输入:
");
scanf("%d",&login);
if(login==1)
{
intflag=3;
while(flag)
{
charpwd[20];
printf("请输入密码:
");
inti=0;
while
(1)
{
pwd[i]=getch();
if(pwd[i]==13)break;
i++;
putchar('*');
}
pwd[i]='\0';
if(!
strcmp(pwd,"123"))
{
printf("\n");
return1;
}else
{
flag--;
printf("\n密码错误!
\n");
continue;
}
}
printf("密码错误超过指定次数,自动退出!
");
exit(0);
}elseif(login==2)
{
return2;//学生登陆菜单
}elseif(login==0)
{
exit(0);
}else
{
printf("输入错误!
");
continue;
}
}
}
voidMenu(intlogin)
{
intdoing;
Save();
printf("\n");
if(login==1)
{
printf("\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃学生成绩管理系统┃\n");
printf("\t┏━━━━┻━━━━━━━━━━━━━━━━━━━┻━━━━┓\n");
printf("\t┃┃\n");
printf("\t┃1.查看成绩┃\n");
printf("\t┃┃\n");
printf("\t┃2.输入成绩┃\n");
printf("\t┃┃\n");
printf("\t┃3.修改成绩┃\n");
printf("\t┃┃\n");
printf("\t┃4.删除成绩┃\n");
printf("\t┃┃\n");
printf("\t┃0.退出┃\n");
printf("\t┃┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t请输入:
");
scanf("%d",&doing);
switch(doing)
{
case1:
SelList(login);break;
case2:
Add();break;
case3:
Upd();break;
case4:
Del();break;
case0:
Save();exit(0);break;
default:
printf("\n\t\t\t【输入错误!
】\n\n");Menu(login);
}
}else
{
SelList(login);
printf("\n");
}
}
voidAdd()
{
Student*r,*p,*t,*S1;
S1=S->Next;
while(S1)
{
if(S1->Next&&(S1->Next->CID>9999||S1->Next->CID<1000))S1->Next=NULL;
S1=S1->Next;
}
t=S;
while(t->Next){t=t->Next;}
intCID,SID;
while
(1)
{
r=(Student*)malloc(sizeof(Student));
printf("请输入班级,输入-1返回:
");
scanf("%d",&r->CID);
if(r->CID!
=-1)
{
printf("请输入学号:
");
scanf("%d",&SID);
p=S->Next;
while(p)
{
intflag=1;
if(SID==p->SID)
{
flag=0;
printf("此学号已存在,是否修改成绩?
Y/N:
");
charyn;
getchar();
scanf("%c",&yn);
if(yn=='y'||yn=='Y')
{
Upd();break;
}else
{
Add();break;
}
}
if(flag!
=1)break;
p=p->Next;
}
r->SID=SID;
printf("请输入姓名:
");
scanf("%s",r->SName);
printf("请输入成绩1:
");
scanf("%f",&r->Score1);
printf("请输入成绩2:
");
scanf("%f",&r->Score2);
printf("请输入成绩3:
");
scanf("%f",&r->Score3);
r->Next=NULL;
t->Next=r;
t=t->Next;
Save();
printf("插入成功!
继续插入");
}else
{
Menu
(1);
break;
}
}
}
voidDel()
{
Student*r;
r=S->Next;
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
printf("┃总成绩单┃");
printf("┣━━┳━━━━━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━┫");
printf("┃学号┃姓名┃班级┃成绩1┃成绩2┃成绩3┃总分┃平均分┃");
printf("┣━━╋━━━━━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━┫");
while(r)
{
if(r->Next&&(r->Next->CID>9999||r->Next->CID<1000))r->Next=NULL;
print(r);
r=r->Next;
}
printf("┗━━┻━━━━━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━┛\n");
Student*p;
p=S;
intSID;
while
(1)
{
printf("请输入学号,输入-1返回:
");
scanf("%d",&SID);
if(SID!
=-1)
{
intflag=1;
while(p->Next)
{
if(p->Next->SID==SID)
{
flag=0;
break;
}
p=p->Next;
}
if(flag==1)printf("未找到学号!
");
else{
p->Next=p->Next->Next;
Save();
printf("删除成功!
继续删除");
}
}else{
Menu
(1);
break;
}
}
}
voidUpd()
{
Student*St,*p;
St=S->Next;
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
printf("┃总成绩单┃");
printf("┣━━┳━━━━━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━┫");
printf("┃学号┃姓名┃班级┃成绩1┃成绩2┃成绩3┃总分┃平均分┃");
printf("┣━━╋━━━━━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━┫");
while(St)
{
if(St->Next&&(St->Next->CID>9999||St->Next->CID<1000))St->Next=NULL;
print(St);
St=St->Next;
}
printf("┗━━┻━━━━━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━┛\n");
p=S->Next;
intSID;
while
(1)
{
printf("请输入学号,输入-1返回:
");
scanf("%d",&SID);
if(SID!
=-1)
{
intflag=1;
while(p)
{
if(p->SID==SID)
{
flag=0;
break;
}
p=p->Next;
}
if(flag==1)printf("未找到学号!
");
else{
printf("请输入成绩1:
");
scanf("%f",&p->Score1);
printf("请输入成绩2:
");
scanf("%f",&p->Score2);
printf("请输入成绩3:
");
scanf("%f",&p->Score3);Save();
printf("修改成功!
继续修改");
}
}else{
Menu
(1);
break;
}
}
}
voidSelList(intlogin)
{
intnum;
printf("┏━━━━━━━━━━━┓\n");
printf("┃查询成绩┃\n");
printf("┣━━━━━━━━━━━┫\n");
printf("┃┃\n");
printf("┃1.班级成绩┃\n");
printf("┃┃\n");
printf("┃2.个人成绩┃\n");
printf("┃┃\n");
printf("┃0.返回┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━┛\n");
printf("请输入:
");
scanf("%d",&num);
switch(num)
{
case1:
ClassList(login);break;
case2:
PerList(login);break;
case0:
if(login==2){Menu(Login());}else{Menu
(1);}break;
default:
printf("\n\t\t\t【输入错误!
】\n\n");SelList(login);
}
}
voidClassList(intlogin)
{
intnum;
printf("┏━━━━━━━━━━━┓\n");
printf("┃查询条件┃\n");
printf("┣━━━━━━━━━━━┫\n");
printf("┃┃\n");
printf("┃1.直接显示┃\n");
printf("┃┃\n");
printf("┃2.按分数段┃\n");
printf("┃┃\n");
printf("┃3.总分排序┃\n");
printf("┃┃\n");
printf("┃0.返回┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━┛\n");
printf("请输入:
");
scanf("%d",&num);
switch(num)
{
case1:
DispAll(login);break;
case2:
DispFT(login);break;
case3:
DispAsc();break;
case0:
SelList(login);break;
default:
printf("\n\t\t\t【输入错误!
】\n\n");ClassList(login);
}
}
voidPerList(login)
{
intSID;
printf("请输入学号,输入-1返回:
");
scanf("%d",&SID);
if(SID!
=-1)
{
Student*p;
p=S->Next;
intflag=1;
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
printf("┃个人成绩单┃");
printf("┣━━┳━━━━━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━┫");
printf("┃学号┃姓名┃班级┃成绩1┃成绩2┃成绩3┃总分┃平均分┃");
printf("┣━━╋━━━━━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━┫");
while(p)
{
if(p->SID==SID)
{
flag=0;
print(p);
break;
}
p=p->Next;
}
printf("┗━━┻━━━━━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━┛\n");
if(flag==1){printf("此学号不存在!
");}
PerList(login);
}else{SelList(login);}
}
voidprint(Student*St)
{
floatt=0;
printf("┃");
printf("%d",St->SID);
printf("┃");
printf("\t%6s",St->SName);
printf("┃");
printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构化程序设计 学生成绩管理系统 结构 程序设计 学生 成绩管理系统