数据结构学生成绩管理系统Word格式.docx

上传人:b****5 文档编号:18691811 上传时间:2022-12-31 格式:DOCX 页数:45 大小:330.87KB
下载 相关 举报
数据结构学生成绩管理系统Word格式.docx_第1页
第1页 / 共45页
数据结构学生成绩管理系统Word格式.docx_第2页
第2页 / 共45页
数据结构学生成绩管理系统Word格式.docx_第3页
第3页 / 共45页
数据结构学生成绩管理系统Word格式.docx_第4页
第4页 / 共45页
数据结构学生成绩管理系统Word格式.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

数据结构学生成绩管理系统Word格式.docx

《数据结构学生成绩管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构学生成绩管理系统Word格式.docx(45页珍藏版)》请在冰豆网上搜索。

数据结构学生成绩管理系统Word格式.docx

1.3.4.程序编码:

把详细设计的结果进一步求精为程序设计语言程序。

同时加入一些注解和断言,使程序中逻辑概念清楚;

1.3.5.程序调试与测试:

采用自底向上,分模块进行,即先调试低层函数。

能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。

调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;

2系统设计

2.1总体设计

按系统分析的功能要求将系统划分为以下几个主要功能模块:

1---学生记录录入

2---学生成绩查询:

按学号查询、按姓名查询

3---删除记录

4---排序

5---修改数据

6---显示全部学生记录

7---统计

8---更换用户

9---保存记录

0---退出系统

2.2详细设计

2.2.1界面设计

1、菜单设计

菜单主要有学生成绩录入、成绩查询、成绩排序、更换用户……设计时主要采用switch-case这个结构,从而选择调用相应的函数。

子菜单也是利用这个原理方法设计的

2、信息显示界面的设计

信息显示主要用了for(;

;

)循环,输出信息,并设置好输出格式,运行时如下:

2.2.2各功能模块的设计

主函数主要作用是控制调用其它函数协调工作。

其流程图如下:

查询窗口

排序窗口

按总分排序

修改窗口

删除窗口

统计窗口

统计结果

2.2.2系统编码设计

3.1预处理命令及结构体类型的声明

#include"

stdio.h"

stdlib.h"

string.h"

windows.h"

#defineM100

3.2main函数

voidmain()

{

welcome();

IO_ReadInfo();

Login();

}

3.3程序代码

voidLogin();

/*<

<

***定义学生结构体***>

>

*/

typedefstructstu{

charStuID[12];

charStudName[12];

floatScore[5];

floatAv;

floatSum;

inttag;

}Stud;

Studstud[M];

intnum=0;

***计算总分***>

*/

floatsum(Studstud)

intj;

floatsum=0;

for(j=0;

j<

5;

j++)

{

sum+=stud.Score[j];

}

returnsum;

***通过学号返回数组下标***>

intStudent_SearchByIndex(charid[])

{

inti;

for(i=0;

i<

num;

i++)

{

if(strcmp(stud[i].StuID,id)==0)

{returni;

}

}

return-1;

***通过姓名返回数组下标***>

intStudent_SearchByName(charname[])

if(strcmp(stud[i].StudName,name)==0)

return-1;

***解决学号冲突***>

intConflictID(Studstud[],intn,charID[])

for(i=0;

i++)

if(i!

=n)

if(strcmp(stud[i].StuID,ID)==0)

{

returnTRUE;

break;

}

if(i==num)

{returnFALSE;

***显示单条学生记录***>

voidStudent_DisplaySingle(intindex)

printf("

\n*◆◆◆◆◆◆◆◆◆◆◆◆学生成绩单◆◆◆◆◆◆◆◆◆◆*\n"

);

\t\t姓名:

%s>

\t学号:

"

stud[index].StudName,stud[index].StuID);

\n\t\t计算机操作系统:

%.2f>

(&

stud[index])->

Score[0]);

\n\t\t大学英语:

Score[1]);

\n\t\t基础会计:

Score[2]);

\n\t\t数据结构:

Score[3]);

\n\t\tJava语言设计:

Score[4]);

\n\t\t总分:

Sum);

\n\t\t平均分:

\n\n\n"

Av);

***显示学生信息***>

voidStudent_Display()

\n%-4s%s\t%-8s%-10s%-10s%-10s%-10s%-10s%-9s\n"

"

编号"

学号"

姓名"

操作系统"

大学英语"

会计基础"

数据结构"

Java设计"

总分"

-------------------------------------------------------------------------------\n"

%-4d%s\t%-8s%-10.2f%-10.2f%-10.2f%-10.2f%-10.2f%-9.1f\n"

i+1,(&

stud[i])->

StuID,(&

StudName,(&

Score[0],(&

Score[1],(&

Score[2],(&

Score[3],(&

Score[4],(&

***插入学生信息***>

voidStudent_Insert()

charc;

\n"

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n\n"

while

(1)

printf("

请输入学号:

scanf("

%s"

&

stud[num].StuID);

while(ConflictID(stud,num,stud[num].StuID))

getchar();

学号已经存在\2\n请重新输入学号:

"

scanf("

}getchar();

请输入学生姓名:

stud[num].StudName);

getchar();

请输入计算机操作系统成绩<

0~100>

:

%f"

stud[num].Score[0]);

while(stud[num].Score[0]>

100||stud[num].Score[0]<

0)

getchar();

输入有误\2请重新输入\n计算机操作系统成绩<

}

请输入大学英语成绩<

stud[num].Score[1]);

while(stud[num].Score[1]>

100||stud[num].Score[1]<

输入有误\2请重新输入\n大学英语成绩<

请输入基础会计成绩<

stud[num].Score[2]);

while(stud[num].Score[2]>

100||stud[num].Score[2]<

输入有误\2请重新输入\n基础会计成绩<

请输入数据结构基础成绩<

stud[num].Score[3]);

while(stud[num].Score[3]>

100||stud[num].Score[3]<

输入有误\2请重新输入\n数据结构基础成绩<

请输入Java语言设计成绩<

stud[num].Score[4]);

while(stud[num].Score[4]>

100||stud[num].Score[4]<

输入有误\2请重新输入\nJava语言设计成绩<

stud[num].Sum=sum(stud[num]);

stud[num].Av=stud[num].Sum/5;

num++;

是否继续?

(y/n)"

%c"

c);

getchar();

if(c=='

N'

||c=='

n'

{break;

***推排序***>

voidsift(Studr[],intt,intw,inttag)

if(tag==1)

inti1,j1;

Studx1;

i1=t;

x1=r[i1];

j1=2*i1+1;

while(j1<

=w)

if((j1<

w)&

&

(strcmp(r[j1].StuID,r[j1+1].StuID)>

0))

j1++;

if((strcmp(x1.StuID,r[j1].StuID))>

{

r[i1]=r[j1];

i1=j1;

j1=2*j1+1;

else

r[i1]=x1;

if(tag==2)

inti2,j2;

Studx2;

i2=t;

x2=r[i2];

j2=2*i2+1;

while(j2<

if((j2<

(r[j2].Sum>

r[j2+1].Sum))

j2++;

if(x2.Sum>

r[j2].Sum)

r[i2]=r[j2];

i2=j2;

j2=2*j2+1;

else

break;

r[i2]=x2;

voidheapsort(Studr[],intn,inttag)/*堆排序*/

inti,xx=0;

Studx;

for(i=n/2-1;

i>

=0;

i--)

sift(r,i,n-1,tag);

for(i=n-1;

0;

x=r[0];

r[0]=r[i];

r[i]=x;

sift(r,0,i-1,tag);

for(i=num-1;

i--)

{++xx;

%-4d%s\t%-8s%-10.2f%-10.2f%-10.2f%-10.2f%-10.2f%-10.1f\n"

xx,(&

***按学号修改学生信息***>

voidStudent_ModifyByID()

charid[20];

intindex;

请输入要修改的学生的学号:

id);

index=Student_SearchByIndex(id);

if(index==-1)

{printf("

学生不存在!

else

你要修改的学生信息为:

Student_DisplaySingle(index);

--请输入新值--\n"

stud[index].StuID);

请输入姓名:

stud[index].StudName);

是否要修改该学生的成绩?

Y/N>

if(c==121||c==89){

stud[index].Score[0]);

while(stud[index].Score[0]>

100||stud[index].Score[0]<

stud[index].Score[1]);

while(stud[index].Score[1]>

100||stud[index].Score[1]<

stud[index].Score[2]);

while(stud[index].Score[2]>

100||stud[index].Score[2]<

stud[index].Score[3]);

while(stud[index].Score[3]>

100||stud[index].Score[3]<

stud[index].Score[4]);

while(stud[index].Score[4]>

100||stud[index].Score[4]<

stud[index].Sum=sum(stud[index]);

stud[index].Av=stud[index].Sum/5;

if(getchar()=='

***按姓名修改学生信息***>

voidStudent_ModifyByName()

charname[20];

请输入要修改的学生的姓名:

name);

index=Student_SearchByName(name);

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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