结构化程序设计 学生成绩管理系统.docx

上传人:b****6 文档编号:5963502 上传时间:2023-01-02 格式:DOCX 页数:37 大小:263.92KB
下载 相关 举报
结构化程序设计 学生成绩管理系统.docx_第1页
第1页 / 共37页
结构化程序设计 学生成绩管理系统.docx_第2页
第2页 / 共37页
结构化程序设计 学生成绩管理系统.docx_第3页
第3页 / 共37页
结构化程序设计 学生成绩管理系统.docx_第4页
第4页 / 共37页
结构化程序设计 学生成绩管理系统.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

结构化程序设计 学生成绩管理系统.docx

《结构化程序设计 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《结构化程序设计 学生成绩管理系统.docx(37页珍藏版)》请在冰豆网上搜索。

结构化程序设计 学生成绩管理系统.docx

结构化程序设计学生成绩管理系统

福建工程学院计算机与信息科学系

实验报告

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("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1