C语言程序大作业.doc
- 格式:doc
- 大小:142.50 KB
- 文档页数:7
C语言程序设计大作业理论课综合训练任课教师:□□□学生学号:□□□□□□□□□□学生姓名:□□□所在班级:□□□□□□□项目名称:□□□□□□□□□□---------------------------------------------------------教师评语(总分20分):(1)基本要求(12分):(2)创新点(2分):(3)实用性(2分):(4)技术水平(2分):(5)卷面综合(2分):教师签名:2022年6月10日一、项目简介本项目所完成的功能包括求三角形面积、一元二次方程求根和排序,是学习生活中的常用计算工具,具有很强的实用性。
本程序包括5个函数模块,在主函数中实现了菜单功能,在窗口菜单提示下,选择数字键完成所需功能,方便用户操作。
j某mj()是求三角形面积函数模块,键盘输入三角形三边之长a、b、c,根据下面公式计算三角形面积。
p=(a+b+c)/2=p(pa)(pb)(pc)如果两边之和大于第三边不成立,输出错误信息。
root()是一元二次方程求实根模块,键盘输入二次项系数a、一次项系数b、常数项c,根据下面公式计算两个实根。
bb24ac某12=2a如果b-4ac<0,输出无实根信息。
pai某u()是排序函数模块,主要读写磁盘文件数据。
程序运行前,必须先在工作区文件夹(或运行程序文件所在文件夹)建立一个文本文件inpai某u.t某t,文件中输入不超过100个整数,数据之间用空格或用回车换行符间隔。
排序结果输出在文本文件outpai某u.t某t中。
myort()是冒泡法排序模块,pai某u()函数是本函数的调用函数,所用算法为冒泡排序算法。
2二、运行测试结果(1)求三角形面积在窗口菜单提示下选择数字键1输入三边之长(用逗号间隔):3,4,5<Enter>=6.000000再次测试输入三边之长(用逗号间隔):1,2,3<Enter>输入数据错误!!!(2)求一元二次方程实根在窗口菜单提示下选择数字键2,分别进行两组测试。
课程设计说明书《C 程序设计大作业》 ——学生成绩管理系统班 级: 电信2009级集成班 学 生: 陈颖宏 学 号: ************ 序 号: 提交日期: 2010 年 3 月 27 日成绩评定:分 任课教师签名: 年月 日前言本课程设计题目是“学生成绩管理系统设计”,其内容是设计一个使用二进制文件方式存储数据,并且以菜单方式工作的管理系统。
设计目的是设计一个能够方便、直观地管理学生相关信息的系统。
该系统可以实现以下功能:○1能按学期、按班级完成对学生成绩的录入、修改;○2能按班级统计显示的成绩,计算学生的总分及平均分;○3能查询学生的成绩,不及格科目及学生名单;○4能按班级输出学生的成绩单。
正文1.需求分析:本程序主要用于输入、查询、统计、导入以及导出学生的成绩。
主要的输入方式是利用键盘输入,且输入的字符最好是英文及数字,输入中文时有时会出现错误。
程序的有效窗口大小一般为半个屏幕,以至于有些功能的版面出现显示方面的错误。
经测试,程序基本可以正常工作:当在主菜单输入“1”时,可以正常初始化,输入余下的菜单选项时也能按要求跳转到指定画面;各子菜单选项也都能正常运行;但是输入班级、姓名等字符时,有时会显示错误的字符。
2概要设计○1抽象数据类型的定义:学生结构体定义为struct stu,变量为student;学期数组定义为char term[7]; 班别数组定义为char banbie[20]; 学号数组定义为char no[15]; 姓名数组定义为char name[20]; 科目数组定义为int score[MAXSUB]; 总成绩变量定义为int sum; 平均成绩变量定义为float average。
○2抽象函数类型的定义:菜单选择程序“menu_select()”为int型; 初始化函数“initialize(student * [])”为void型;数据输入函数“input(student * [])”为void型;数据编辑函数“editmenu(student * [])”为void型; 数据查询查询函数“searchmenu(student * [])”为void型; 数据统计函数“total(student * [])”为void型; 数据导出函数“save(student * [])”为void型;数据导入函数“load(student * [])”为void型; 数据导出函数“output(student * [])”为void型;添加学生记录函数“add_record(student * [])”为void型;删除学生记录“delete_record(student * [])”为void型;修改学生记录函数“student * edit_record(student * [])”为void型;按学号查询函数“student * no_search(student * [])”为void型; 按姓名查询函数“student * name_search(student * [])”为void型。
学年论文(课程论文、课程设计)题目:学生信息管理系统作者:所在学院:信息科学与工程学院专业年级:指导教师:职称:2010 年 1 月 2日大作业题目:学生成绩管理系统大作业目的:(1) 进一步熟悉C的语法知识和VC++环境;(2) 熟练掌握一些常用算法,如排序、查找等;(3) 熟悉C程序的编写与调试;(4)增加学生对C语言的兴趣大作业要求:设计一学生成绩管理系统,要求实现数据的录入、插入、删除、修改、查找、查询、排序、统计、显示等功能。
(1)数据结构:学号、姓名、性别、年龄、3门课程成绩、总分、平均分。
(2)为用户提供友好的菜单选择界面,用户通过键入数字或者字母实现功能选择,进入相应的功能。
(3)功能:a)数据录入——按顺序录入学生成绩b)删除记录c)修改记录d)查询记录——按学号等进行简单查询e)计算总分和平均分f)排序:可以按学号、总分、平均分显示学生信息g)学生信息能以文件的形式保存,或读取h)页面以汉字形式输出。
i)插入学生信息j)统计学生分数k)退出(4)对系统常量要求用符号常量进行规范,对于常用的功能和算法如排序要求做成自己的库函数,并使用头文件的方式实现分离编译。
(5)要求提供算法分析、程序流程图,对实验结果的处理包括程序调试结果、结论及改进方案、实习体会等内容。
三. 大作业总体设计及源代码 1、总体设计2、源代码#include <stdio.h>#include <string.h> /*定义数组*/ #define M 3struct student /*结构体*/ {int xh;//学生学号char xm[20]; /*数组*/ char xb; int nl;int cj[M];//成绩int zf,pjf; /*总分与平均分*/ };struct student s[20];/*学生数组*/ int n=0;主函数 输入 插入删除 编辑 查找 分类 显示 统计保存载入退出void calc(i){int sum=0,j;for(j=0;j<M;j++)sum=sum+s[i].cj[j];s[i].zf=sum;s[i].pjf=sum/M;}void input()/*插入*/{int locate(int xh);int xh,i,sum;printf("请输入学号:");scanf("%12d",&xh);getchar();while (xh!=0){if (locate(xh)!=-1){printf("学号已存在!!!\n\n");goto abc;}s[n].xh=xh;printf("姓名:");gets(s[n].xm);printf("性别:");scanf("%c",&s[n].xb);printf("年龄:");scanf("%d",&s[n].nl);sum=0;printf("3门成绩,成绩范围0--150:");for(i=0;i<M;i++)scanf("%d",&s[n].cj[i]);if (s[n].cj[i]<0 || s[n].cj[i]>150){printf("成绩超出范围");return;}calc(n);n++;abc: printf("\n请输入学号:");scanf("%d",&xh);getchar();}}void insert() /*插入*/{int locate(int xh);int i,j,t;int xh;printf("输入插入位置(0---%d):",n);scanf("%d",&i);if (i<0 || i>n){printf("序号超出范围!!!\n",n);return;}for(j=n-1;j>=i;j--){s[j+1].xh=s[j].xh;strcpy(s[j+1].xm,s[j].xm);s[j+1].xb=s[j].xb;s[j+1].nl=s[j].nl;s[j+1].cj[0]=s[j].cj[0];s[j+1].cj[1]=s[j].cj[1];s[j+1].cj[2]=s[j].cj[2];}printf(" 请输入学号:");scanf("%d",&s[i].xh); getchar(); printf("\n");printf("请输入姓名:");gets(s[i].xm);printf("请输入性别:");scanf("%c",&s[i].xb);printf("请输入年龄:");scanf("%d",&s[i].nl);printf("请输入3科成绩,成绩范围0---150:");for(j=0;j<M;j++){ scanf("%d",&s[i].cj[j]);if(s[i].cj[j]>150){ printf("分数超出范围,请核对后再输入!!!!!\n");return;}}calc(i);n=n+1;}//删除void del(){int xh,i,j;int locate(int xh);printf("输入学号:");scanf("%d",&xh);i=locate(xh);if (i!=-1){for(j=i+1;j<n;j++){s[j-1].xh=s[j].xh;strcpy(s[j-1].xm,s[j].xm);s[j-1].xb=s[j].xb;s[j-1].nl=s[j].nl;s[j-1].cj[0]=s[j].cj[0];s[j-1].cj[1]=s[j].cj[1];s[j-1].cj[2]=s[j].cj[2];}n=n-1;}elseprintf("无法删除 !!!\n");}int locate(int xh){int i,j;for(i=0;i<n;i++)if (s[i].xh==xh){printf("%11d",s[i].xh);printf("%20s",s[i].xm);printf("%3c",s[i].xb);printf("%5d",s[i].nl);for(j=0;j<M;j++)printf("%5d",s[i].cj[j]);printf("%5d",s[i].zf);printf("%5d",s[i].pjf);printf("\n");return i;}printf("学号不存在,请输入学生信息!!!\n");return -1;}//显示void display(){int i,j;printf(" ---------------- 学生成绩统计 ---------------\n");printf(" 学号姓名性别年龄成绩 1 成绩 2 成绩3 总分平均分\n");for(i=0;i<n;i++){printf("%5d",s[i].xh);printf("%20s",s[i].xm);printf("%3c",s[i].xb);printf("%5d",s[i].nl);for(j=0;j<M;j++)printf("%5d",s[i].cj[j]);printf("%5d",s[i].zf);printf("%5d",s[i].pjf);printf("\n");printf("-----------------------------------------------------\n") ;}}void save(){FILE *fp;int i;char fname[20];printf("输入文件名:");gets(fname);fp=fopen(fname,"wb");if (fp==NULL){printf("文件打开错误!!!\n");return;}for(i=0;i<n;i++)if(fwrite(&s[i],sizeof(struct student),1,fp)!=1){printf("文件写入错误!\n");return;}printf("文件保存成功!\n");fclose(fp);}void swap(int a,int b){int t;char xm[20];char xb;t=s[a].xh; s[a].xh=s[b].xh; s[b].xh=t;strcpy(xm,s[a].xm); strcpy(s[a].xm,s[b].xm); strcpy(s[b].xm,xm);xb=s[a].xb; s[a].xb=s[b].xb; s[b].xb=xb;t=s[a].nl; s[a].nl=s[b].nl; s[b].nl=t;t=s[a].cj[0]; s[a].cj[0]=s[b].cj[0]; s[b].cj[0]=t;t=s[a].cj[1]; s[a].cj[1]=s[b].cj[1]; s[b].cj[1]=t;t=s[a].cj[2]; s[a].cj[2]=s[b].cj[2]; s[b].cj[2]=t;t=s[a].zf; s[a].zf=s[b].zf; s[b].zf=t;t=s[a].pjf; s[a].pjf=s[b].pjf; s[b].pjf=t;}//冒泡排序法void sortbyxh(){int i,j;for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++)if(s[j].xh>s[j+1].xh)swap(j,j+1);}printf("顺序已经排好!\n");}void sortbyzf(){int i,j;for(i=0;i<n-1;i++) //进行n-1次循环,进行n-1次比较{for(j=0;j<n-i-1;j++) //在每一趟比较中进行n-i-1次比较 if(s[j].zf>s[j+1].zf) //相临的两个数比较swap(j,j+1);}printf("顺序已经排好!\n");}void sortbypjf(){int i,j;for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++)if(s[j].pjf>s[j+1].pjf)swap(j,j+1);}printf("顺序已经排好!\n");}void sort(){int i;printf("1 按学生学号排序 \n");printf("2 按学生总分排序 \n");printf("3 按平均分数排序 \n");printf("\n");printf("请输入选项:");scanf("%d",&i);switch(i){case 1: sortbyxh(); break;case 2: sortbyzf(); break;case 3: sortbypjf();break;}}//下载文件void load(){FILE *fp;int i;char fname[20];printf("输入文件名:");gets(fname);fp=fopen(fname,"rb");if (fp==NULL){printf("文件打开错误!\n");return;}//从文件中载入学生信息n=0;while (!feof(fp)){if (fread(&s[n],sizeof(struct student),1,fp)!=1) { break;}n++;}printf("文件成功载入!\n");fclose(fp);}//统计数据void stas(){int a,b,c,d,e;int i;a=b=c=d=e=0;for(i=0;i<n;i++){switch(s[i].pjf/10){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8: a++; break;case 9:case 10: b++; break;case 11:c++; break;case 12:d++; break;case 13:case 14:e++; break;case 15:;}}printf("<80 %d %5.2f%%\n",a,a*100.0/n); printf("90<-->110 %d %5.2f%%\n",b,b*100.0/n);printf("110<-->120 %d %5.2f%%\n",c,c*100.0/n);printf("120<-->130 %d %5.2f%%\n",d,d*100.0/n); printf("130<-->150 %d %5.2f%%\n",e,e*100.0/n); }void edit() //编辑学生信息板块{int locate(int xh);int xh;int i;printf("请输入学号:\n");scanf("%12d",&xh);getchar();i=locate(xh);if(i==-1){printf("学号不存在!\n");return;}printf("请输入3门课的成绩:");scanf("%d%d%d",&s[i].cj[0],&s[i].cj[1],&s[i].cj[2]);calc(i);printf("修改成功!\n");}void main(){int c=1;while (c!=0){printf(" **********************\n");printf(" *学生成绩管理系统菜单*\n");printf(" **********************\n");printf(" (1) 输入 * (2) 插入 \n");printf(" (3) 删除 * (4) 编辑 \n");printf(" (5) 查找 * (6) 排序 \n");printf(" (7) 显示 * (8) 保存 \n");printf(" (9) 载入 * (10) 统计 \n");printf(" (0) 退出 * \n");printf(" ********************** \n");printf(" 输入选项: ");scanf("%d",&c); getchar();//条件选择语句switch(c){case 1: input(); break;case 2: insert();break;case 3: del(); break;case 4: edit();break;case 5:{int xh;printf("输入学号:");scanf("%12d",&xh);locate(xh); break;}case 6: sort();break;case 7: display(); break;case 8: save();break;case 9: load();break;case 10: stas();case 0: break;}}}3、调试结果4总结.(如需要,可附结论及改进方案、实习体会)新疆大学课程论文(设计)、学年论文评分表题目作者专业年级指导教师指导教师评语及评分建议指导教师:年月日院(部)或教研室意见学院或教研室主任:年月日。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★C语言第三次大作业班级:机电***姓名:*******学号:*********★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★题目一:利用数组编写一个简单的成绩管理系统,要求有效依据至少150条,利用程序设计模块化思想,自定义函数不少于5个。
其他要求:1、班级的人数由用户键盘输入;2、录入学生学号和考试成绩3、数据分析功能包括计算课程总分和平均分、按成绩由高到低排出成绩表、按学号由小到大排出成绩表、可按学号查询学生成绩及排名、按优秀(90~100),良好(80~89),中等(70~79),及格(60~69),不及格(<60)5个类别统计成绩并计算百分比和输出每个学生的学号、成绩及课程总分和平均分。
1、题意及算法分析根据题目要求,结合程序设计模块化思想,可自定义7~9个函数,分别实现相应的功能。
根据题目要求可定义学号数组为整形数组,平均分、成绩数组为float 类型;定义宏常量N,使得数组足够大;成绩和学号的排序可采用交换法、选择法、插入排序、冒泡法、快速排序法等,本题采用交换法排序,在采用交换法排序的时候可以通过定义一个标志变量(中间变量)实现;通过学号查找成绩可通过线性查找(顺序查找)或折半查找,本题采用的是顺序查找,采用顺序查找可以用for循环语句实现,查找次数最多为总人数n。
统计等级时,利用整数除法(区别于实数除法),结合switch语句和计数控制循环语句即可得到不同等级所占百分比。
菜单功能选择是可使用switch-case条件结构。
要注意的是数组的下标从0开始;只能逐个引用数组元素,不能一次引用整个数组;数组做函数形式参数时,数组的大小可以不出现在数组名后面的方括号内;被调用函数的实际参数用数组名或数组定义式。
2、NS流程图传统流程图:3、调试及改错1、缺少取地址运算符“&”写好程序后,解决ERROR后会情不自禁的执行程序,一执行便弹出如下对话框,回过头看程序,发现int read(long number[],float score[])函数中“printf("请输入学生总人数:"); ret=scanf("%d",n);”的语句中出现一个明显的低级错误,缺少取地址运算符“&”。
学年学期:20xx - 20xx 学年 1 学期课程名称:C语言程序设计综合训练课程学分:2分考核形式:大作业任课教师:xx题目:学生成绩统计程序学院:xx学院__________________________________ 专业班级:xx_______________________________________ 学号:_______ 学生姓名:提交日期:目录目录 (2)引言 (3)1. 学生成绩管理系统 (4)1.1系统简介 (4)1.2相关代码及知识点介绍 (4)2. 添加学生成绩功能 (5)3. 查找学生成绩功能 (6)4. 排序学生成绩功能 (7)5. 展示学生成绩功能 (9)6. 删除学生成绩功能 (10)7. 附页代码 (11)引言C语言是一种比较常见的计算机语言,许多大型应用软件都是用C语言编写而成的。
其简洁紧凑,灵活方便,数据结构丰富。
在一定程度上,C语言比汇编语言更实用,具有结构化语句,实现了结构化编程,使程序编写变得更容易、更快捷,可以编写出各种类型的程序。
同时,C语言是一门实践性强的学科,在学习的过程中,利用所学知识,编写一些与生活、学习相关的应用程序来提高程序编写能力,增强学习兴趣。
本次使用C语言设计一个学生成绩管理系统,可以实现学生成绩的添加,查找,排序及展示。
在作业中使用的是函数的模块化设计,将四个程序使用四个函数来实现。
与此同时,增加用户界面的交互,可供用户选择想要的功能,实现增删查排等操作。
1. 学生成绩管理系统1.1系统简介该系统主要实现学生成绩的添加,查找,排序,展示和删除五个功能,添加学生成绩主要有6个输入值组成,其中包括学号,姓名,语文,数学,英语,政治等。
查找学生成绩主要通过学号查询。
对学生成绩进行排序,可以分别通过学号,语文,数学,英语,政治,平均分,总分等进行排序。
第四项功能是对学生成绩以表格的形式进行展示。
删除学生成绩是按照学号对表格中的数据进行删除。
1数据处理系统一、软件开发目的该软件主要是使用C语言设计开发数据处理程序,实现对数据的排序、查找、插入、计算、输出等功能。
二、数据结构定义一个11*10的二维数组。
三、软件功能说明1.生成100个随机数:调用库函数rand()或random()产生100个随机数,并存储在二维数组中的前十行。
2.选择法排序:用选择法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
3.冒泡法排序:用冒泡法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
4.插入法排序:用插入法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
5.查找数据:输入待查找数据, 在二维数组中逐个查找,若找到输出数据所在位置的行列号,若无该数值则输出“无此数”。
6.转换二进制:将数组中数据转换为二进制并转存到另一数组中输出。
7.转换为素数之和:对于原数组中的数进行判断:若为偶数,则表示成两个素数的和,并输出。
8.插入数据:输入一个数,将该数插入原数组中,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
9.删除数据输入一个数,若原数组中存在该数,则删除该数,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
10.退出系统,结束任务。
四、软件验收标准1.有较为美观简洁大方的菜单,能保证用户方便、直观、快捷的熟悉并使用软件的各项功能。
系统菜单功能项:1生成100个随机数2选择法排序3冒泡法排序4插入法排序5查找数据6转换二进制7转换为素数之和8插入数据9删除数据10退出系统注意:要求每执行一个具体的功能之后,程序将重新显示菜单。
2.系统要有一定的可靠性、稳定性,能够实现各功能模块。
2图书借阅管理系统一、软件开发目的该软件主要是使用C语言设计开发一个简单的图书借阅管理系统,实现对图书的借书,还书的管理和数据统计。
C语言大作业
猜数字游戏
信安三班
孙麒 2009302530088
戈丽萍 2009302530066
分工
戈丽萍:A、B、Win函数,流程图孙麒:main、Guess函数、程序调试
一、游戏说明
1、系统随机产生一组不重复的4位数字
2、游戏者输入所猜的不重复数字,并按回车提交。
3、系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。
其
中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。
如:1A3B 表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对!
4、游戏者有限定的8次的猜测机会,在规定次数内完成,则游戏成功,否则,
游戏失败。
5、游戏成功后,将根据游戏者猜测所需要的次数对其进行评价:第一次猜出为perfect,第二——第四次猜出为great
二、详细流程
1、main函数
、
2、win函数(判断输赢)
3、A函数(判断数字且位置正确的个数)
A (char m[4],char n[4])
B(char m[4],char n[4],in a)
4、B函数(判断数字对但是位置不对的个数)
5、主函数Guess(char right[4])
三、总结经验
在确定了设计的内容之后,经历了很长时间的思考想出了算法。
但是在设计中反复出现错误,特别是B函数,检查很多遍之后觉得算法并无问题。
就分块进行调试。
后来偶然发现原来是整个过程中的“==”都写成了赋值“=”,导致错误,今后一定要细心才可以。
学生成绩管理系统每位学生至少包括学号,姓名,班级和四门课程的成绩和奖惩程序功能:1统计每个班每门课程平均成绩,最高分,最低分2对该专业所有学生进行排名,排名原则:按所有成绩之和进行排名同时要求参与排名的学生每门功课都及格若有不及格的不参与排名3评出专业优秀者与班级优秀者。
专业优秀者评选条件:专业总成绩排名前十,并且所有科目不低于85。
班级优秀者评选条件:所有课程不低于85或者有两门(包括两门)以上单科成绩是班级第一,并且在奖惩栏备注。
备注:编写程序时要有备注信息,即每个模块实现功能,以及引用变量的作用也可以在C++下完成,再此环境下注释采用中文所有结果均以文件形式保存。
#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h>#define N 75 /*专业学生总数*/struct student{int cl;char xh[20];char name[20];float mark[4]; /*四门成绩:数学成绩:mark[0] ,英语成绩:mark[1],计算机成绩:mark[2],物理成绩:mark[3]*/}stu[N];struct rank{char name[20];float mark;}gread[100];FILE *fp;float high[3][4]={0};void menu(){printf("********************************\n");printf("**提示:请输入的总人数不超过100人**\n");printf("1.输入学生成绩\n");printf("2.统计每个班每门课程平均成绩,最高分,最低分\n");printf("3.学生成绩的专业排名(不含有不及格科目的学生)\n");printf("4.专业评选结果\n");printf("5.班级评选结果\n");printf("0.退出程序\n");printf(" 请选择0-5:");printf("********************************\n");}void input() /*学生信息输入函数*/{int i;for(i=0;i<N;i++){ printf("请输入学生信息\n");printf("请输入班级(1,2,3),学号,姓名,数学成绩,英语成绩,计算机成绩,物理成绩:\n");scanf("%d%s%s%f%f%f%f",&stu[i].cl,stu[i].xh,stu[i].name,&stu[i].mark[0],&stu[i].mark[1],&st u[i].mark[2],&stu[i].mark[3]);}}void statistics() /*统计每个班每门课程平均成绩,最高分,最低分*/{ float sum[3][4]={0},low[3][4]={100,100,100,100,100,100,100,100,100,100,100,100};float ave[3][4];int i,j;int num[3]={0};for(i=0;i<N;i++){switch(stu[i].cl){ case 1: sum[0][0]+=stu[i].mark[0]; /*一班数学成绩总和*/sum[0][1]+=stu[i].mark[1];/*一班英语成绩总和*/sum[0][2]+=stu[i].mark[2];/*一班计算机成绩总和*/sum[0][3]+=stu[i].mark[3];/*一班物理成绩总和*/if(high[0][0]<stu[i].mark[0]) high[0][0]=stu[i].mark[0];if(high[0][1]<stu[i].mark[1]) high[0][1]=stu[i].mark[1];if(high[0][2]<stu[i].mark[2]) high[0][2]=stu[i].mark[2];if(high[0][3]<stu[i].mark[3]) high[0][3]=stu[i].mark[3];if(low[0][0]>stu[i].mark[0]) low[0][0]=stu[i].mark[0];if(low[0][1]>stu[i].mark[1]) low[0][1]=stu[i].mark[1];if(low[0][2]>stu[i].mark[2]) low[0][2]=stu[i].mark[2];if(low[0][3]>stu[i].mark[3]) low[0][3]=stu[i].mark[3];num[0]++;break;case 2: sum[1][0]+=stu[i].mark[0]; /*二班数学成绩总和*/sum[1][1]+=stu[i].mark[1];/*二班英语成绩总和*/sum[1][2]+=stu[i].mark[2]; /*二班计算机成绩总和*/sum[1][3]+=stu[i].mark[3];/*二班物理成绩总和*/if(high[1][0]<stu[i].mark[0]) high[1][0]=stu[i].mark[0];if(high[1][1]<stu[i].mark[1]) high[1][1]=stu[i].mark[1];if(high[1][2]<stu[i].mark[2]) high[1][2]=stu[i].mark[2];if(high[1][3]<stu[i].mark[3]) high[1][3]=stu[i].mark[3];if(low[1][0]>stu[i].mark[0]) low[1][0]=stu[i].mark[0];if(low[1][1]>stu[i].mark[1]) low[1][1]=stu[i].mark[1];if(low[1][2]>stu[i].mark[2]) low[1][2]=stu[i].mark[2];if(low[1][3]>stu[i].mark[3]) low[1][3]=stu[i].mark[3];num[1]++;break;case 3: sum[2][0]+=stu[i].mark[0];sum[2][1]+=stu[i].mark[1];sum[2][2]+=stu[i].mark[2];sum[2][3]+=stu[i].mark[3];if(high[2][0]<stu[i].mark[0]) high[2][0]=stu[i].mark[0];if(high[2][1]<stu[i].mark[1]) high[2][1]=stu[i].mark[1];if(high[2][2]<stu[i].mark[2]) high[2][2]=stu[i].mark[2];if(high[2][3]<stu[i].mark[3]) high[2][3]=stu[i].mark[3];if(low[2][0]>stu[i].mark[0]) low[2][0]=stu[i].mark[0];if(low[2][1]>stu[i].mark[1]) low[2][1]=stu[i].mark[1];if(low[2][2]>stu[i].mark[2]) low[2][2]=stu[i].mark[2];if(low[2][3]>stu[i].mark[3]) low[2][3]=stu[i].mark[3];num[2]++;break;}}for(i=0;i<3;i++)for(j=0;j<4;j++)ave[i][j]=sum[i][j]/num[i];for(i=0;i<3;i++){ printf("班级:%d \n",i+1);fprintf(fp,"班级:%d \n",i+1);for(j=0;j<4;j++){ ave[i][j]=sum[i][j]/num[i];printf("平均成绩:math\tenglish\tcomputer\tphysics\n");printf("平均成绩:%.2f\t%.2f\t%.2f\t%.2f\n",ave[i][0],ave[i][1],ave[i][2],ave[i][3]);printf("最高分:math\tenglish\tcomputer\tphysics\n");printf("最高分:%.2f\t%.2f\t%.2f\t%.2f\n",high[i][0],high[i][1],high[i][2],high[i][3]);printf("最低分:math\tenglish\tcomputer\tphysics\n");printf("最低分:%.2f\t%.2f\t%.2f\t%.2f\n",low[i][0],low[i][1],low[i][2],low[i][3]);fprintf(fp,"平均成绩:math\tenglish\tcomputer\tphysics\n");fprintf(fp,"平均成绩:%.2f\t%.2f\t%.2f\t%.2f\n",ave[i][0],ave[i][1],ave[i][2],ave[i][3]);fprintf(fp,"最高分:math\tenglish\tcomputer\tphysics\n");fprintf(fp,"最高分:%.2f\t%.2f\t%.2f\t%.2f\n",high[i][0],high[i][1],high[i][2],high[i][3]);fprintf(fp,"最低分:math\tenglish\tcomputer\tphysics\n");fprintf(fp,"最低分:%.2f\t%.2f\t%.2f\t%.2f\n",low[i][0],low[i][1],low[i][2],low[i][3]);}}}void ranking() /*专业学生成绩排名从高到低去(除不及格的)排名*/{int i,j;int t=0;float n;char ch[20];for(i=0;i<N;i++)for(j=0;j<4;j++){ if(stu[i].mark[j]<60) break;else{gread[t++].mark=stu[i].mark[0]+stu[i].mark[1]+stu[i].mark[2]+stu[i].mark[3];strcpy(gread[t].name,stu[i].name);}}for(i=0;i<t-1;i++)for(j=0;j<t-1-i;j++)if(gread[j].mark>gread[j+1].mark){n=gread[i+1].mark;strcpy(ch,gread[i+1].name);gread[i+1].mark=gread[i].mark;strcpy(gread[i+1].name,gread[i].name);gread[i].mark=n;strcpy(gread[i].name,ch);}for(t-1;t>=0;t--){ printf("Performance ranking results(high to low):\n");fprintf(fp,"Performance ranking results(high to low):\n");printf("%s\t%.2f\t%d\n",gread[i].name,gread[i].mark,i+1);fprintf(fp,"%s\t%.2f\t%d\n",gread[i].name,gread[i].mark,i+1);}}void apraised1() /*专业优秀选奖*/{struct reward1{char name[20];float mark[4];int flag;}stu1[10];int i,j,k;for(i=0;i<10;i++)stu1[i].flag=1;for(i=0;i<10;i++){ strcpy(stu1[i].name,gread[i].name);for(j=0;j<N;j++)if(strcmp(stu1[i].name,stu[j].name)==0)for(k=0;k<4;k++)stu1[i].mark[k]=stu[j].mark[k];}for(i=0;i<10;i++)for(j=0;j<4;j++)if(stu1[i].mark[j]<85) stu1[i].flag=0;for(i=0;i<10;i++)if(stu1[i].flag==1){printf("奖励%s\n",stu1[i].name);fprintf(fp,"奖励%s\n",stu1[i].name);}}void apraised2() /*班级优秀评选*/{ int i,m1=0,n1=0,m2=0,n2=0,m3=0,n3=0,l1=0,l2=0,l3=0,k;charreward1[10][20],reward2[10][20],reward3[10][20],reward4[10][20],reward5[10][20],reward6[10] [20];for(i=0;i<N;i++)switch(stu[i].cl){case1:if(stu[i].mark[0]>=85&&stu[i].mark[1]>=85&&stu[i].mark[2]>=85&&stu[i].mark[3]>=85) strcpy(reward1[m1++],stu[i].name);elsefor(k=0;k<4;k++){if(stu[i].mark[k]==high[0][k]) l1++;if(l1>=2) strcpy(reward2[n1++],stu[i].name);}case2:if(stu[i].mark[0]>=85&&stu[i].mark[1]>=85&&stu[i].mark[2]>=85&&stu[i].mark[3]>=85) strcpy(reward3[m2++],stu[i].name);elsefor(k=0;k<4;k++){if(stu[i].mark[k]==high[1][k]) l2++;if(l2>=2) strcpy(reward4[n2++],stu[i].name);}case3:if(stu[i].mark[0]>=85&&stu[i].mark[1]>=85&&stu[i].mark[2]>=85&&stu[i].mark[3]>=85) strcpy(reward5[m3++],stu[i].name);elsefor(k=0;k<4;k++){if(stu[i].mark[k]==high[2][k]) l3++;if(l3>=2) strcpy(reward6[n3++],stu[i].name);}}printf("一班\t");printf("每门成绩不低于85分:");for(i=0;i<m1;i++)printf("%s\n",reward1[i]);printf("至少有两门单科第一:");for(i=0;i<n1;i++)printf("%s\n",reward2[i]);fprintf(fp,"一班\t");fprintf(fp,"每门成绩不低于85分:");for(i=0;i<m1;i++)fprintf(fp,"%s\n",reward1[i]);fprintf(fp,"至少有两门单科第一:");for(i=0;i<n1;i++)fprintf(fp,"%s\n",reward2[i]);printf("二班\t");printf("每门成绩不低于85分:");for(i=0;i<m2;i++)printf("%s\n",reward3[i]);printf("至少有两门单科第一:");for(i=0;i<n2;i++)printf("%s\n",reward4[i]);fprintf(fp,"二班\t");fprintf(fp,"每门成绩不低于85分:");for(i=0;i<m2;i++)fprintf(fp,"%s\n",reward3[i]);fprintf(fp,"至少有两门单科第一:");for(i=0;i<n2;i++)fprintf(fp,"%s\n",reward4[i]);printf("三班\t");printf("每门成绩不低于85分:");for(i=0;i<m3;i++)printf("%s\n",reward5[i]);printf("至少有两门单科第一:");for(i=0;i<n3;i++)printf("%s\n",reward6[i]);fprintf(fp,"三班\t");fprintf(fp,"每门成绩不低于85分:");for(i=0;i<m3;i++)fprintf(fp,"%s\n",reward5[i]);fprintf(fp,"至少有两门单科第一:");for(i=0;i<n3;i++)fprintf(fp,"%s\n",reward6[i]);}void main(){ int choice;fp=fopen("学生信息","w");while(1){ menu();scanf("%d",&choice);switch(choice){ case 1: input(); break;case 2: statistics(); break;case 3: ranking(); break;case 4: apraised1(); break;case 5: apraised2(); break;case 0: exit(0); break;}}fclose(fp);}。
大连理工大学C程序设计(大作业)总结报告学生成绩录入处理系统
学生姓名:罗
专业班级:
学号:
联系电话:
Email :
完成日期:2015年 5 月29日
一、设计任务
我的程序设计是一个学生成绩录入及处理的程序,该程序包括多种功能,能够满足大多数的学生成绩管理处理。
主要能够实现的目的主要有:
第一.学生姓名学号既包括三门成绩等信息的录入,并保存到文件d://score.txt。
第二.对每个学生的成绩进行求平均分及按平均分排序的数字处理。
第三.对输入错误的学生信息加以修改重新排序保存。
第四.增加学生信息,重新排序,加以保存。
第五.按每个学生的平均分进行表格化和图形化处理。
第六.实现某位同学的信息查找,包括姓名,学号,每科成绩及平均分。
以上功能全都可以实现,但是注意录入信息的要求,下面会有注释。
二、程序设计与实现
1.结构框图
下图描述预期实现题目的设计方案或功能设计的组成结构。
绘制成框图,如图所示是我设计的成绩信息管理程序设计的结构图示:
2.功能模块设计及其流程图
(1) 数据描述与存储
该学生信息统计系统设计一个全局结构体变量,将学生的姓名,学号,各科成绩及平均分保存在结构体,然后供设计各种程序调用,以完成修改,增加,排序和数据显示的功能。
学生成绩数据以二进制存储在d://score.txt文件,可以利用程序随时进行增加和修改,同时它会自动排序。
的描述题目所使用的核心数据,如;结构体类型定义及结构体成员含义说明。
并说明所使用的数据存储方法,指定文件的路径和文件名,保存数据的格式和读数据的目的。
(2) 结构体定义及介绍
typedef struct rec /*定义一个结构体类型*/
{ char name[20]; /*第一个元素为学生姓名,20个字节*/
short number; /*第一个元素为学生学号,2个字节(输入注意不要超出)*/
short score[M]; /*(M为全局3)依次定义三门科目分数:数,英,机*/
float average; /*定义浮点型平均数,保留2位小数,有函数计算赋值*/ }score;
score stu[N]; /*(N为全局100)定义全局总数100个学生信息以录入*/
(3)对于该程序的一点说明
1.学号在0~32768之间,请录入前对学号做好数据处理。
2.该系统的成绩满分为一百分制,如有某科成绩不符合应提前处理。
3.录入退出后,同样的数据不需两次输入,可直接运行程序处理及查看。
4.保存退出后请勿删除文件,数据会丢失。
5.柱状图的分辨率在十位数。
(4) 主要函数功能基变量说明
(4) 主要函数及其流程图
此处描述所有自定义函数的函数名,函数功能,参数说明及算法描述。
画出主要函数规范流程图。
例如,将每个函数按如下方式的说明(strcom()流程图如图2所示)。
函数原型1
void correct() /*针对输错的学生信息进行重新输入*/
假如某位学生信息输入错误,用此功能函数就可以用正确信息将错误信息覆盖,从而获得正确信息。
没有参数传递,在函数中利用循环全部信息中查找出该学生,直接利用全局变量,将该学生新信息重输以达目的。
函数原型2
void add() /*增加信息*/
如有想要输入新的学生或漏输,用此功能可以将某些学生的信息录入,当然,增加后总数不得超过100。
没有参数的传递,直接在以前的数据后面增加,然后对所有学生排序,做到所有数据同等处理。
函数原型3
void loadscore() /*加载学生信息*/
这儿之所以提起这个函数,是因为我在刚开始理解利用过程中,有点赘余出错。
该函数是加载函数,如果你是输入后不关闭用时是可以不用这个函数的,因为在你关闭之前所有的信息依然保存在全局结构体内。
然而,当你关闭以后再利用时必须要用这个函数将你写在文件中的信息读入结构体,再从结构体打印到屏幕。
函数原型4 ……….
(5) 个性化设计
该函数不难,但方法思维较好,进行介绍和结构图示:
函数原型void histograma_all() /*以排序后的平均成绩按柱状图查看*/
利用*的连续输入模拟柱状图,求十位数,按每增加1输出两个**,连续输入则组成柱状图。
最后在柱状图后面打印学生平均成绩。
三、设计效果
下图是录入12个学生后显示的排名结果:
下图是柱状图显示排名结果:
下图是查找界面:
四、结束语
该系统能改顺利完成学生成绩录入,学生成绩排名,学生增修后重新排名,在以表格和柱状图显示,和某同学的信息查询,能够以较好的界面和提示完成录入及数据处理,显示等。
在录入,修改,增加,排名,保存,加载,浏览等一系列部分的小问题,但通过多次修改还是能找到错误所在,最终完善整个程序。
但该程序也存在卓多局限,例如分数制,输入负数无错误提醒,平均分相同排序相同等,但是,只要继续修改,相信我能突破这些局限。
12周课很快,程序这门课,应该以概念加实践平衡学习。
最深的感触就是每次找到错误后的顿悟和你作业的成就感。