学生成绩管理系统c语言结构体以及文件操作实验报告.doc

上传人:wj 文档编号:1305535 上传时间:2023-04-30 格式:DOC 页数:12 大小:71.50KB
下载 相关 举报
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第1页
第1页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第2页
第2页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第3页
第3页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第4页
第4页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第5页
第5页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第6页
第6页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第7页
第7页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第8页
第8页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第9页
第9页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第10页
第10页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第11页
第11页 / 共12页
学生成绩管理系统c语言结构体以及文件操作实验报告.doc_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

学生成绩管理系统c语言结构体以及文件操作实验报告.doc

《学生成绩管理系统c语言结构体以及文件操作实验报告.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统c语言结构体以及文件操作实验报告.doc(12页珍藏版)》请在冰点文库上搜索。

学生成绩管理系统c语言结构体以及文件操作实验报告.doc

哈尔滨工业大学(威海)软件学院

C程序设计实验报告

编号:

姓名

孟令鑫

院系

软件学院

学号

131110412

任课教师

于水

指导教师

实验地点

研究院中507-508

实验时间

2013年12月12日

实验名称

文件操作

同组人

预习报告(对实验主要内容的认识)

得分

实验目的:

练习使用C语言的标准I/O函数系列处理文件

熟悉二维数组的操作函数、模块化程序设计以及增量测试方法

熟悉结构体类型、结构体数组、写钩体数组函数参数、体会结构体类型代替普通的数组类型实现数据库管理的优越性

熟悉文件的基本操作以及增量的测试方法

实验内容(问题,思路,程序,结果)

得分

一、设计思路:

仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)

1、输入初始的学生信息:

其中包括学生的学号、姓名、数学、物理、英语成绩等相关信息;使用for循环,以及结构体成员调用一次录入每个学生的成绩等学生信息

2、计算平均和总分模块:

利用两层for循环,计数变量i累加一次循环一个学生、计数变量j进行与科目次数相同的累加循环每个科目的成绩进行累加。

3、按照学生成绩以及姓名字典排序模块:

比较学生成绩的高低以及姓名字典的大小,使用选择法进行排序

4、查询模块:

遍历结构体数组,如果姓名相同则循环输出学生的信息。

5、写文件模块:

使用fopen函数打开文件以后进行循环写入。

一直到最后一个学生。

6、读文件操作模块:

打开文件以后,进行循环输出,一直循环的文件的最末尾。

利用feof()。

7、退出函数,使用exit函数进行操作。

将整个程序模块化编写之后,在主函数中使用while循环调用,使用switc函数进行选择相应的函数功能。

为了防止用户不按照正常的操作流程操作,不进行学生成绩的输入就进行后续操作导致的系统报错或者弹出错误,在调用函数之前使用while循环增加一段容错代码,如果用户第一次选择的不是输入功能则提示用户选择错误并返回循环重新要求用户选择功能,直到用户输出成绩为止,跳出容错的处理循环进行正常的功能选择循环。

最后进行相应的用户使用界面的设计和优化。

二、菜单设计

***************欢迎进入学生成绩管理系统****************

*********programmedbyMenglingxin131110412************

*************************菜单***************************

**1、录入每个学生的学号,姓名,和各科考试成绩!

**

**2、计算每个学生的总分和平均分!

**

**3、按每个学生的总分和平均分从高到低排出名次表!

**

**4、按姓名的字典顺序排出成绩!

**

**5、按姓名查询学生学生排名和考试成绩!

**

**6、输出每个学生的学号,姓名,各科成绩!

**

**7、将每个学生的信息写入文件!

**

**8、从文件读取信息并显示!

**

**9、退出程序!

**

*******************************************************

三、退出界面

***************************************

****谢谢您的使用****

***************************************

四、错误提示界面

***************************************

*****请先录入学生信息和成绩****

***************************************

五、函数代码

1、主函数

/*编程:

孟令鑫131110412

时间:

2013年12月24日

内容;结构体实现学生成绩管理系统*/

#include

#include

#defineCOURSE3

#defineSTUD_N30

#include"lab1.h"

#include"lab2.h"

#include"lab3.h"

#include"lab4.h"

#include"lab5.h"

#include"lab6.h"

#include"lab7.h"

intmain()

{

intchoice,n,pos,j;

STUDENTstu[STUD_N];

charx[10],ch;//定义一个十个字节的字符数组用来存放要查找的姓名

printf("***************欢迎进入学生成绩管理系统****************\n");

printf("*********programmedbyMenglingxin131110412***********\n");

printf("*************************菜单**************************\n");

printf("**1、录入每个学生的学号,姓名,和各科考试成绩!

**\n");

printf("**2、计算每个学生的总分和平均分!

**\n");

printf("**3、按每个学生的总分和平均分从高到低排出名次表!

**\n");

printf("**4、按姓名的字典顺序排出成绩!

**\n");

printf("**5、按姓名查询学生学生排名和考试成绩!

**\n");

printf("**6、输出每个学生的学号,姓名,各科成绩!

**\n");

printf("**7、将每个学生的信息写入文件!

**\n");

printf("**8、从文件读取信息并显示!

**\n");

printf("**9、退出程序!

**\n");

printf("*******************************************************\n");

while

(1)//用来处理用户的错误输入

{

printf("请输入您要进行的操作:

\t");

scanf("%d",&choice);

if(choice==1)

{

n=InputScore(stu,3);//调用录入函数

printf("分数录入完毕!

\n");

break;//如果用户正确的先录入了学生成绩则跳出该错误处理循环

}

elseif(choice==9)

{

printf("***************************************\n");

printf("****谢谢您的使用****\n");

printf("***************************************\n");

exit(0);

}

else//如果没有先录入成绩用户直接进行其他操作则提示用户请先录入学生成绩并反复循环。

{

printf("***************************************\n");

printf("*****请先录入学生信息和成绩****\n");

printf("***************************************\n");

}

}

while

(1)//用while循环实现功能循环操作

{

printf("请输入您要进行的操作:

\t");

scanf("%d",&choice);

switch(choice)

{

case1:

n=InputScore(stu,3);//调用录入函数

printf("分数录入完毕!

\n");

break;

case2:

AverforStudent(stu,n,COURSE);//调用平均数函数

printf("平均分计算完毕!

\n");

break;

case3:

AverforStudent(stu,n,COURSE);//调用平均数函数

sortbystudentsumS(stu,n);//调用排序

printf("《按学生平均分进行降序排序:

》\n");

Print(stu,n,COURSE);

break;

case4:

AverforStudent(stu,n,COURSE);

SortbyName(stu,n);

printf("《按姓名字典输出:

》\n");

Print(stu,n,COURSE);

break;

case5:

AverforStudent(stu,n,COURSE);

do{

printf("请输入您要查找的姓名:

\n");

scanf("%s",x);

pos=LinrSearch(stu,x,n);

if(pos!

=-1)//循环输出学生的成绩和学号等

{

printf("%ld%8s",stu[pos].studentID,stu[pos].studentName);

for(j=0;j

{

printf("%4d",stu[pos].score[j]);

}

printf("%4d",stu[pos].sumS);

printf("%6.1f\n",stu[pos].averS);

}

else

{

printf("没有找到这个学生的信息!

\n");

}

printf("您还想继续进行查找吗?

(y/n)");

scanf("%c",&ch);

}while(ch=='y');

break;

case6:

//成绩输出

AverforStudent(stu,n,COURSE);

printf("《成绩输出:

》\n");

Print(stu,n,COURSE);

break;

case7:

//写文件

AverforStudent(stu,n,COURSE);

WritetoFile(stu,n,COURSE);

printf("已经成功写入文件!

\n");

break;

case8:

//读文件

ReadfromFile(stu,COURSE);

PrintScore(stu,n,COURSE);

break;

case9:

printf("***************************************\n");

printf("*********谢谢您的使用********\n");

printf("***************************************\n");

exit(0);

break;

default:

//容错处理

printf("输入错误!

");

break;

}

}

return0;

}

2、各个模块

#include

#include

#defineCOURSE3

#defineSTUD_N30

typedefstructstudent//定义学生的信息结构体

{

longstudentID;

charstudentName[10];

intscore[3];

floataverS;

intsumS;

}STUDENT;

//函数功能:

利用循环输入学生的学号姓名以及成绩等信息。

intInputScore(STUDENTstu[],intm)

{

inti,j,n;

printf("请输入参加考试的人数:

");

scanf("%d",&n);

for(i=0;i

{

printf("请输入第%d个学生的信息:

学号,姓名,成绩(数学、英语,物理)\n",i+1);

scanf("%ld",&stu[i].studentID);

scanf("%s",stu[i].studentName);

for(j=0;j

{

scanf("%d",&stu[i].score[j]);

}

}

returni;//返回学生人数

}

#include

#include

#defineCOURSE3

#defineSTUD_N30

typedefstructstudent//定义学生信息的结构体

{

longstudentID;

charstudentName[10];

intscore[3];

floataverS;

intsumS;

}STUDENT;

//函数功能:

计算学生的平均分、总分

voidAverforStudent(STUDENTstu[],intn,intm)

{

inti,j;

for(i=0;i

{

stu[i].sumS=0;

for(j=0;j

{

stu[i].sumS=stu[i].sumS+stu[i].score[j];

}

stu[i].averS=stu[i].sumS/m;

}

}

//函数功能:

循环输出学生的成绩信息

voidPrint(STUDENTstu[],intn,intm)

{

inti,j;

for(i=0;i

{

printf("%10ld%8s\t",stu[i].studentID,stu[i].studentName);

for(j=0;j

{

printf("%d\t",stu[i].score[j]);

}

printf("%d\t",stu[i].sumS);

printf("%6.1f\t",stu[i].averS);

printf("\t%d\n",i+1);

}

}

#include

#include

#include

#defineCOURSE3

#defineSTUD_N30

typedefstructstudent//定义学生的信息结构体

{

longstudentID;

charstudentName[10];

intscore[3];

floataverS;

intsumS;

}STUDENT;

//声明打印的函数

voidPrint(STUDENTstu[],intn,intm);

//函数功能:

按照学生的总分进行排序

voidsortbystudentsumS(STUDENTstu[],intn)

{

inti,j,k,t,d;

longa;

charb[10];

intc;

floate;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].sumS>stu[k].sumS)

{

k=j;

}

}

if(k!

=i)

{

//交换学号。

a=stu[k].studentID;

stu[k].studentID=stu[i].studentID;

stu[i].studentID=a;

//交换姓名

strcpy(b,stu[k].studentName);

strcpy(stu[k].studentName,stu[i].studentName);

strcpy(stu[i].studentName,b);

//交换成绩

for(t=0;t

{

d=stu[i].score[t];

stu[i].score[t]=stu[k].score[t];

stu[k].score[t]=d;

}

//交换总分。

c=stu[k].sumS;

stu[k].sumS=stu[i].sumS;

stu[i].sumS=c;

//交换平均分。

e=stu[k].averS;

stu[k].averS=stu[i].averS;

stu[i].averS=e;

}

}

}

#include

#include

#include

#defineCOURSE3

#defineSTUD_N30

typedefstructstudent

{

longstudentID;

char

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2