C语言程序设计报告学生成绩记录簿文档格式.docx

上传人:b****5 文档编号:19619843 上传时间:2023-01-08 格式:DOCX 页数:24 大小:245.35KB
下载 相关 举报
C语言程序设计报告学生成绩记录簿文档格式.docx_第1页
第1页 / 共24页
C语言程序设计报告学生成绩记录簿文档格式.docx_第2页
第2页 / 共24页
C语言程序设计报告学生成绩记录簿文档格式.docx_第3页
第3页 / 共24页
C语言程序设计报告学生成绩记录簿文档格式.docx_第4页
第4页 / 共24页
C语言程序设计报告学生成绩记录簿文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C语言程序设计报告学生成绩记录簿文档格式.docx

《C语言程序设计报告学生成绩记录簿文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告学生成绩记录簿文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

C语言程序设计报告学生成绩记录簿文档格式.docx

4.将子函数与主函数相连即可。

该程序可以建立学生的成绩记录。

可以方便老师和同学方便的查阅成绩;

这个程序有录入和删除的功能;

还可以求出平均成绩,并排序

2.1程序系统的结构

2.2程序流程图

课程编号

查询学生成绩

学号查询

姓名查询

查询班级成绩

2.3功能

成绩记录簿中记录以下数据:

学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分;

输入信息时要检查数据项学号、课程编号、成绩、学分的合法性,学号:

8位数字;

课程编号:

5位数字;

成绩:

0~100之间的整数,学分:

1~5之间的实型数。

􀁺

添加成绩:

需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示;

查询(班级或个人)成绩:

查询个人成绩:

以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成的总学分。

查询班级成绩:

以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布的人数及百分比。

拓展功能:

a)程序启动时先从文件读入数据,如果文件中没有数据则给出提示;

b)每次修改的数据写入文件

2.4性能

方便,灵活,直观,易用

输入项:

charname[10]设置学生名称

longintid定义学号为长整型

floatavg平均分为实数

输出项

intm1,m2,m3,score,xf;

定义整型

floatavg;

以浮点型输出平均分

主程序提供一个界面,允许用户选择。

使用switch语句,用时直接输入数字即可。

增加函数,功能是插入学生成绩。

使用一个无穷循环,直到录入”n”时结束。

删除函数,功能是删除,分为两步,先找后删。

找,用strcmp函数来做如果找到记录i值,反之记为-1;

删除可以从i项开始将数组的后一项赋值给前一项。

前一项自动被删掉。

这样完成删除。

查询函数与之类似,将删除改为输出即可;

求平均值函数与查询类似只是输出时只输出平均值而已。

按平均值排序只要加一个排序函数即可。

退出函数什么都不写,即可。

No

Yes

3.2算法

本程序参考了冒泡法

其代码结构为:

For(i=0;

i<

k;

i++)

{

For(j=i;

j<

j++)

If(a>

b)

{

}

其中也多次用到了循环和判断结构

3运行结果及说明

1.开始时

2.添加

3.删除

4.查询学生成绩

(1)按名字查询

(2)按学号查询

4.查询班级成绩

5.写入文本文件

6.读取文本文件

4课程设计总结

短短的俩周已经过去了,在此我将交出我一周的成果,我真是百感交错

1.原先写程序直接编,条理性太差。

如果先做一个流程图就条理很多。

2.学会了将文件存入和读取,并学会在文件中加入信息和删除信息。

3.我在查找学生姓名时遇到困难,从课本上找到了一个函数strcmp,解决了问题

困难:

我在定义学生的学号时首先用整型%d。

发现输出与录入不同。

改用长整型%ld仍然不行。

但是字符型%s却可以做到。

事实上,与过去相比,我认为这短短的一周给我的感悟更为强烈。

在此,首先我要感谢老师,是老师把我带进了这一门,俗话说的好“万丈高楼平地起”,所以说,基础很重要。

而老师讲课认真,讲也很透彻,使我们能较好的理解这门课,可以跟紧课堂进度,是我们有机会能打下结实良好的基础。

而且老师在平时也鼓励我们多提问,在我们遇到问题时,富有耐心地为我们解答。

在此再次感谢老师对我们不辞操劳的讲解!

谢谢!

一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦”,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,以前的上机实验就像是小孩子玩得,一点技术含量也没有。

以前的那些实验只要看看书,花上一二个小时,基本就可以完成了,而且以前的小程序最多也不过二三十行,不像这次要百来行。

从中可见它的难度,从而联想到那些专业编程员,我更深刻感到自己的不足。

由于之前从未进行过如此大的编程,所以一开始根本没头绪,后来只好用死办法,像写作文一样,首先先在纸上列出大致的提纲,然后再一个个慢慢延伸展开,最后再输入计算机,用它来运行。

可惜不运行还好,一运行只见一片的红色错误提示。

有些错误很简单,很好改,是由于自己的粗枝大叶引起的,比如:

有些字符未定义,漏了一个“;

”等。

但也有些高深莫测的问题,例如:

当我好不容易把程序运行出来后,却发现当我选择删除这一项时,会发现不论我选择是按学号删除还是按姓名删除都不会出现我所要删除的内容,而是直接询问确定删除请按1~~。

又或者是当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,却只有两位同学的成绩。

后来在百思不得其解之下,我只好向周围同学寻求帮助,最终在大家的帮助之下才解决的,诸如此类的问题还不少!

有的已经解决,但有些还未,可惜时间不够,也只能如此。

经过这一周的课程设计,我发现我懂得了很多,它使我在编程时更仔细了,也使我学会了向周围人求教,培养了我自我学习,独立思考。

并且,使我更体会到了和高中的不一样,一切靠自觉,没有人会跟在你后面一直催你,告诉你该怎样怎样。

同时,我也更加了解到自己的不足,基础严重不扎实。

虽然这门课快结束了,但我会努力在假期中把自己的基础补好,期待在下次的课程设计时能够得心应手!

参考文献:

[1]谭浩强.C程序设计(第三版).北京:

清华大学出版社,2005

[2]谭浩强.C程序设计题解与上机指导(第三版).北京:

[3]HerbertSchildt.C语言大全(第四版).北京:

电子工业出版社,2004

[4]SamuelP.HarbisonⅢ,GuyL.Steele.C语言参考手册(第5版).北京:

机械工业出版社,2003

[5]张建勋.C语言程序设计教程.北京:

清华大学出版社,2008.2

[6]崔武子.C程序设计教程(第2版).北京:

清华大学出版社,2007.6(第2版)

[7]K.N.King.C语言程序设计:

现代方法(第2版).北京:

人民邮电出版社,2010

原代码解析:

#include<

stdio.h>

stdlib.h>

string.h>

#defineMAX1000

structLesson

charLessonName[100];

charLessonNumber[100];

intLessonMark;

floatLessonCredit;

};

structStudent

charName[100];

charNumber[100];

intLessonCount;

structLessonL[100];

structStudentS[MAX];

intStudentCount=0;

voidPrintInterface();

intStudent_Insert();

intStudent_Delete();

voidStudent_Select();

voidClass_Select();

voidWriteFile();

voidReadFile();

intmain()

intn;

PrintInterface();

scanf("

%d"

&

n);

}

voidPrintInterface()

{

while

(1)

printf("

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

);

\n|1、添加|\n"

\n|2、删除|\n"

\n|3、查学生成绩|\n"

\n|4、查班成绩表|\n"

\n|5、写入文本文件|\n"

\n|6、读取文本文件|\n"

\n|0、退出|\n"

\n选择操作:

"

&

switch(n){

case1:

if(Student_Insert())

printf("

\n添加成功...回车继续\n"

else

\n添加失败...回车继续\n"

break;

case2:

Student_Delete();

case3:

Student_Select();

case4:

Class_Select();

break;

case5:

WriteFile();

case6:

ReadFile();

case0:

exit

(1);

default:

无此功能,请重新选择,按回车确定\n"

}

return0;

intStudent_Insert()

inti,j,n;

\n请输入所添加的学生人数:

if(StudentCount+n>

=MAX)

for(i=StudentCount;

i<

StudentCount+n;

++i)

\n\t第%d个学生:

\n"

i-StudentCount+1);

\n\t学生学号:

scanf("

%s"

S[i].Number);

if(strlen(S[i].Number)!

=8)

{

printf("

输入错误,请重新输入"

return0;

}

\n\t学生姓名:

S[i].Name);

\n\t该学生所修课程数:

S[i].LessonCount);

for(j=0;

j<

S[i].LessonCount;

++j)

\n\t第%d门课:

j+1);

\n\t\t课程编号:

scanf("

S[i].L[j].LessonNumber);

if(strlen(S[i].L[j].LessonNumber)!

=5)

{

输入错误,请重新输入!

\n\t\t课程名称:

S[i].L[j].LessonName);

\n\t\t课程成绩:

S[i].L[j].LessonMark);

if(S[i].L[j].LessonMark<

0||S[i].L[j].LessonMark>

100)

\n\t\t课程学分:

%f"

S[i].L[j].LessonCredit);

if(S[i].L[j].LessonCredit<

1||S[i].L[j].LessonCredit>

5)

if(S[i].L[j].LessonMark<

60)

S[i].L[j].LessonCredit=0;

StudentCount+=n;

return1;

intStudent_Delete()

chara[100];

charb[100];

inti,j;

\n删除学生:

\n学生姓名:

a);

\n学生学号:

b);

if(strlen(b)!

输入错误请重新输入"

for(i=0;

StudentCount;

i++)

if(0==strcmp(S[i].Name,a)&

&

0==strcmp(S[i].Number,b))

\n找到,删除\n"

for(j=i+1;

j++)

S[j-1]=S[j];

if(i==StudentCount||i>

StudentCount)

\n未找到该学生\n\n"

else

StudentCount--;

voidStudent_Select()

intx;

chary[100];

\n输入所查学生信息(1.姓名2.学号)选择:

x);

if(x==1||x==2)

if(x==1)

\n姓名:

fflush(stdin);

gets(a);

if(0==strcmp(S[i].Name,a))

\n学号:

%s\t姓名:

%s\n"

S[i].Number,S[i].Name);

\n课程编号\t课程名称\t课程成绩\t课程学分\n"

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

%s\t\t%s\t\t%d\t\t%f\n"

S[i].L[j].LessonNumber,

S[i].L[j].LessonName,S[i].L[j].LessonMark,

S[i].L[j].LessonCredit);

\n\n"

fflush(stdin);

gets(y);

if(strcmp(S[i].Number,y)==0)

S[i].L[j].LessonNumber,S[i].L[j].LessonName,

S[i].L[j].LessonMark,S[i].L[j].LessonCredit);

查找完毕...回车继续\n"

getchar();

选择错误...回车继续\n"

return;

voidClass_Select()

doublex=0,y=0,z=0;

\n请输入课程编号:

学号\t姓名\t课程名称\t课程成绩\t课程学分\n"

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

if(strcmp(S[i].L[j].LessonNumber,a)==0)

%s\t%s\t%s\t\t%d\t\t%f\n"

S[i].Number,S[i].Name,S[i].L[j].LessonName,

S[i].L[j].LessonMark,S[i].L[j].LessonCredit);

z+=S[i].L[j].LessonMark;

x++;

if(S[i].L[j].LessonMark>

=60)

y++;

\n平均分:

%f\t及格率:

%f%%\n\n"

z/x,y/x*100);

\n查找完毕...回车继续\n"

voidWriteFile()

FILE*fp;

\n请输入写入的文件地址:

\n\n地址输入格式:

例如d:

\\\\Student.txt:

a);

\n写入中......\n"

if(fp=fopen(a,"

w"

))

fprintf(fp,"

%d\n"

StudentCount);

%s\t%s\t%d\n"

S[i].Number,S[i].Name,S[i].LessonCount);

%s\t%s\t%d\t%f\n"

S[i].L[j].LessonNumber,S[i].L[j].LessonName,

S[i].L[j].LessonMark,S[i].L[j].LessonCredit);

\n写入完成...回车继续\n"

fclose(fp);

\n写入失败...回车继续\n"

voidReadFile()

\n请输入读取的文件地址:

\\\\student.txt:

\n读取中......\n"

r"

))

fscanf(fp,"

StudentCount);

%s%s%d"

S[i].Number,&

S[i].Name,&

%s%s%d%f"

S[i].L[j].Les

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

当前位置:首页 > 医药卫生

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

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