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

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

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

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

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

C语言程序设计报告学生成绩记录簿docx

 

上海应用技术学院

 

课程设计

2011~2012学年第2学期

 

设计题目成绩记录簿

 

院(系)

计算机科学与信息工程

网络工程

学号15

学生姓名

xx

设计时间

指导教师

xxx

提交日期

 

1.概述

题目

 

程序简述

 

程序性能

2课题分析

程序系统的结构

结构流程图

功能

性能

输入输出项信息

3功能模块说明流程逻辑

算法

 

4程序测试,运行结果及说明

5课程设计总结

6附录(参考文献,原代码解析,限制条件,程序测试)

6.1参考文献

6.2原代码解析

限制条件

 

1.概述

题目

 

成绩记录簿

 

程序描述

 

本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。

本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、删除等。

我设

计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。

 

1.建立一个主界面

2.用switch语句进行分类讨论

3.分别进入录入,查询,删除,求平均值等子函数。

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

程序性能

 

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

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

 

绩;

 

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

 

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

课题分析

 

程序系统的结构

 

主函数

 

添加成绩求平均值删除成绩查询按平均值排序

 

退出

 

程序流程图

课程编号

 

添加成绩查询成绩

 

 

查询学生成绩查询班级成绩

 

功能

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

学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都

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

8

位数字;课程编号:

5位数字;成绩:

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

1~5之间的实型数。

添加成绩:

需要输入学生的学号或姓名、

课程编号及成绩,如已有该门课程成绩给出提示;

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

查询个人成绩:

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

分。

查询班级成绩:

以课程编号为关键字,

成绩表后面要统计平均分、

及格率及全班同学不同

课程在不同分数段分布的人数及百分比。

拓展功能:

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

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

 

性能

方便,灵活,直观,易用

输入输出项信息

输入项:

charname[10]

设置学生名称

longintid

定义学号为长整型

floatavg

平均分为实数

 

输出项

intm1,m2,m3,score,xf;定义整型

floatavg;以浮点型输出平均分

 

3功能模块说明

流程逻辑

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

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

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

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

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

找,用strcmp函数来做如果找到记录i值,反之记为-1;删除可以从i项开始将数组的后一项赋值给前一项。

前一项自动被删掉。

这样完成删除。

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

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

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

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

 

开始

 

输入口令

 

主菜单

 

选择的序号是否

符合需求

Yes

 

 

No

 

读退

取出

文系

件统

 

3.2算法

本程序参考了冒泡法

其代码结构为:

For(i=0;i

{

For(j=i;j

{

If(a>b)

{

}

}

}

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

 

运行结果及说明

1.开始时

 

2.添加

 

3.删除

 

4.查询学生成绩

(1)按名字查询

 

(2)按学号查询

 

4.查询班级成绩

 

5.写入文本文件

strcmp,解决了问题

 

6.读取文本文件

 

课程设计总结

短短的俩周已经过去了,在此我将交出我一周的成果,我真是百感交错原先写程序直接编,条理性太差。

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

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

我在查找学生姓名时遇到困难,从课本上找到了一个函数

 

困难:

 

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

发现输出与录入不同。

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

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

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

在此,首先我要感谢老师,是老师把我带进了这一门,俗话说的好“万

丈高楼平地起”,所以说,基础很重要。

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

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

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

谢谢!

一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦”,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,

以前的上机实验就像是小孩子玩得,一点技术含量也没有。

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

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

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

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

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

有些字符

未定义,漏了一个“;”等。

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

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

又或者是当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,

却只有两位同学的成绩。

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

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

经过这一周的课程设计,我发现我懂得了很多,它使我在编程时更仔细了,也使

我学会了向周围人求教,培养了我自我学习,独立思考。

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

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

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

 

6附录(参考文献,原代码解析,限制条件,程序测试)

参考文献:

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

清华大学出版社,2005

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

清华大学出版社,2005

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

[4]SamuelⅢ,Guy.C语言参考手册(第5

.北京:

电子工业出版社,2004

版).北京:

机械工业出版社,2003

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

清华大学出版社,

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

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

 

[7]语言程序设计:

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

人民邮电出版社,2010

 

原代码解析:

#include<>

#include<>

#include<>

#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()

{

intn;

while

(1)

{

printf("\n--------------------------");

printf("\n|1、添加

printf("\n|2、删除

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

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

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

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

printf("\n|0、退出

printf("\n--------------------------");

printf("\n选择操作:

");

scanf("%d",&n);

switch(n){

case1:

if(Student_Insert())

printf("\n添加成功

else

printf("\n添加失败

break;

 

|\n");

|\n");

|\n");

|\n");

|\n");

|\n");

|\n");

 

...回车继续\n");

 

...回车继续\n");

 

case2:

Student_Delete();

break;

 

case3:

Student_Select();

break;

 

case4:

Class_Select();

break;

 

case5:

WriteFile();

break;

 

case6:

ReadFile();

 

break;

 

case0:

exit

(1);

break;

default:

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

}

}

return0;

}

 

intStudent_Insert()

{

inti,j,n;

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

");

scanf("%d",&n);

if(StudentCount+n>=MAX)

return0;

for(i=StudentCount;i

{

printf("\n\t第%d个学生:

\n",i-StudentCount+1);

 

printf("\n\t学生学号:

");

scanf("%s",&S[i].Number);

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

=8)

{

printf("输入错误,请重新输入");

return0;

}

 

printf("\n\t学生姓名:

");

scanf("%s",S[i].Name);

 

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

");

scanf("%d",&S[i].LessonCount);

for(j=0;j

{

printf("\n\t第%d门课:

\n",j+1);

printf("\n\t\t课程编号:

");

scanf("%s",S[i].L[j].LessonNumber);

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

=5)

{

printf("输入错误,请重新输入!

");

 

return0;

}

printf("\n\t\t课程名称:

");

scanf("%s",S[i].L[j].LessonName);

 

printf("\n\t\t课程成绩:

");

scanf("%d",&S[i].L[j].LessonMark);

if(S[i].L[j].LessonMark<0||S[i].L[j].LessonMark>100)

{

printf("输入错误,请重新输入!

");

return0;

}

 

printf("\n\t\t课程学分:

");

scanf("%f",&S[i].L[j].LessonCredit);

if(S[i].L[j].LessonCredit<1||S[i].L[j].LessonCredit>5)

{

printf("输入错误,请重新输入!

");

return0;

}

 

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

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

}

}

StudentCount+=n;

return1;

}

 

intStudent_Delete()

{

chara[100];

charb[100];

inti,j;

printf("\n删除学生:

\n");

printf("\n学生姓名:

");

scanf("%s",a);

printf("\n学生学号:

");

scanf("%s",b);

if(strlen(b)!

=8)

{

printf("输入错误请重新输入");

return0;

 

}

for(i=0;i

{

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

{

printf("\n找到,删除\n");

for(j=i+1;j

{

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

}

break;

}

}

if(i==StudentCount||i>StudentCount)

{

printf("\n未找到该学生\n\n");

return0;

}

else

{

StudentCount--;

return1;

}

}

 

voidStudent_Select()

{

intx;

chary[100];

chara[100];

inti,j;

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

");scanf("%d",&x);

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

{

if(x==1)

{

printf("\n姓名:

");

fflush(stdin);

gets(a);

for(i=0;i

{

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

{

 

printf("\n学号:

%s\t姓名:

%s\n",S[i].Number,S[i].Name);

printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n");

printf("-----------------------------------------------------\n");

for(j=0;j

{

printf("%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);

printf("-----------------------------------------------------\n");

}

printf("\n\n");

}

}

}

else

{

printf("\n学号:

");

fflush(stdin);

gets(y);

for(i=0;i

{

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

{

printf("\n学号:

%s\t姓名:

%s\n",S[i].Number,S[i].Name);

printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n");

printf("-----------------------------------------------------\n");

for(j=0;j

{

printf("%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);

printf("-----------------------------------------------------\n");

}

printf("\n\n");

break;

}

}

}

printf("查找完毕...回车继续\n");

getchar();

}

else

{

printf("选择错误...回车继续\n");

 

getchar();

return;

}

}

 

voidClass_Select()

{

chara[100];

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

inti,j;

printf("\n请输入课程编号:

");

fflush(stdin);

scanf("%s",a);

printf("学号\t姓名\t课程名称\t课程成绩\t

printf("----------------------------------------------------\n");

for(i=0;i

{

 

课程学分

 

\n");

for(j=0;j

{

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

{

printf("%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);

printf("----------------------------------------------------\n");

 

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

x++;

 

if(S[i].L[j].LessonMark>=60)

y++;

break;

}

}

}

printf("\n平均分:

%f\t及格率:

%f%%\n\n",z/x,y/x*100);

printf("\n查找完毕...回车继续\n");

getchar();

}

 

voidWriteFile()

{

FILE*fp;

inti,j;

 

chara[100];

printf("\n

请输入写入的文件地址:

\n\n

地址输入格式:

例如

");

scanf("%s",&a);

printf("\n写入中......\n");

if(fp=fopen(a,"w"))

{

fprintf(fp,"%d\n",StudentCount);

for(i=0;i

{

fprintf(fp,"%s\t%s\t%d\n",S[i].Number,S[i].Name,S[i].LessonCount);for(j=0;j

{

fprintf(fp,"%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);

}

}

printf("\n写入完成...回车继续\n");

fclose(fp);

}

else

{

printf("\n

写入失败

...回车继续

\n");

}

getchar();

}

voidReadFile()

{

FILE*fp;

inti,j;

chara[100];

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

\n\n

地址输入格式:

例如

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

当前位置:首页 > 求职职场 > 职业规划

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

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