学生成绩管理系统
C语言课程设计任务书
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目 学生成绩管理系统
起讫日期 2006年7月3日 至2006年8月6日
学生姓名 范明达 专业班级 软件08.2
所在院系 软件学院
指导教师 张秀梅 职称 教授
所在单位 软件学院
20011年6月 24 日
任务及
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
:
1. 设计(研究)
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
和要求(包括设计或研究内容、主要指标与技术参数,根据课题
性质对学生提出具体要求)
研究内容:学生成绩管理
任务和要求:
(1)(学习C语言基础知识,掌握C语言编程和程序调试的基本技能。
(2)(对指导教师下达的题目进行系统分析。
(3)(根据分析结果完成系统设计,包括详细设计部分内容。
(4)(编程:在计算机上实现题目的代码实现。
(5)(完成对该系统的测试和调试。
(6)(写出用户使用说明报告。
(7). 提交课程设计报告。
(8).指标:
要求完成课程设计报告4千字以上(约二、三十页)
软件系统300行语句以上
用户使用说明书(3千汉字以上)
2.原始依据(包括设计或论文的工作基础、研究条件、应用环境、工作目的等) 了解C语言的基础知识,有一定的语言编程基础,能够熟练运用C语言进行程序设计。通过用C语言完成的题目,提高用C语言解决实际问题的能力。 3.参考文献
[1] 黄明等.21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005
[2] 马靖善等.C语言程序设计.清华大学出版社,2005
[3] 谭浩强.C语言程序设计(第二版).北京:高等教育出版社,2002
指导教师签字:
教研室主任签字:
2006年 7月1日
摘 要
利用所学过的C语言知识,采用结构化程序设计方法,设计一个学生成绩管理档案程序,该程序的主要功能为: 0将表格初始化,1建立学生成绩表格,2从表中删除原有纪录,3显示单链表中所有记录,4按照姓名查找纪录,5计算所有学生的总分和均分,6插入纪录到表中,7复制文件,8将所有学生成绩排序,9分类合计,10退出。该系统功能完善,界面友好,短小经用,使用方便,即使是不熟悉计算机也可以自如的使用该系统。通过上机调试运行与模拟操作,完成对学生成绩的管理,减轻管理人员的劳动强度,提高一个学校的自动化管理水平。
关键词:学生成绩管理;结构化程序设计;调试运行;功能完善
目 录
第一章 概述 ......................................................................................................... 1
1.1项目背景.................................................................................................. 1
1.2工作环境.................................................................................................. 1 第二章 系统分析.................................................................................................. 2
2.1系统需求分析 .......................................................................................... 2
2.2 系统功能分析 ......................................................................................... 2
2.2.1模块实现算法 ............................................................................... 2
2.2.2进入主菜单。 ............................................................................... 3
2.2.3 建立学生表格 .............................................................................. 3
2.2.4从表中删除原有纪录 .................................................................... 3
2.2.5显示单链表中所有记录 ................................................................ 3
2.2.6按照姓名查找纪录 ........................................................................ 4
2.2.7计算所有学生的总分和均分 ........................................................ 4
2.2.8插入纪录到表中 ........................................................................... 4
2.2.9复制文件 ....................................................................................... 4
2.2.10将所有学生成绩排序 .................................................................. 5
2.2.11分类合计: ................................................................................. 5
2.2.12退出 ............................................................................................. 5 第三章 总体设计.................................................................................................. 6
3.1软件描述.................................................................................................. 6
3.2设计方法.................................................................................................. 6
3.3软件结构.................................................................................................. 6
3.4文件及函数组成 ...................................................................................... 7 第五章 使用说明................................................................................................ 11 第六章
工作总结
关于社区教育工作总结关于年中工作总结关于校园安全工作总结关于校园安全工作总结关于意识形态工作总结
................................................................................................ 17 参考文献(参考书或论文或文章) ................................................................... 18 附录 源代码 ....................................................................................................... 19
第一章 概述
现今已步入高速发展的时代,电脑技术发展日新月异,时代潮流也不断变革,竞争越发激烈,时间就是金钱,但是就是在一些琐碎的事上面浪费了大量的时间,例如查询资料之类.如果我们把浪费的时间用于其他方面,势必会有更大的收益.应此需求,为使广大教师掌握更多的时间,相应的开发出此软件—学生成绩管理软件系统.而编写详细设计说明书是软件开发过程必不可少的部分,其目的是为了使开发人员在完成概要设计说明书的基础上完成概要设计规定的各项模块的具体实现的设计工作。本软件属于绿色软件, 适合任何层次的用户, 因此本说明书的预期读者范围相当广。
1.1项目背景
一、软件名称
学生成绩管理
二、相关单位
主要是学校用于学校的成绩管理
1.2工作环境
A.一台586 以上的微机及兼容
B(内存16MB(最好32MB内存)
C(VGA 彩显一台
1
第二章 系统分析
2.1系统需求分析
随着网络经济时代的到来,社会飞速的发展,人们的生活发生着日新月异的变化,高新技术正驱赶着人们生活的脚步,人们对工作生活的要求也日益提高,特别是计算机的应用及普及到经济和社会生活的各个领域。使原本的旧的管理方法越来越不适应现在社会的发展。许多人还停留在以前的手工操作,随着各个学校的规模增大,有关学生成绩管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理,但手工管理具有效率底、,这大大地阻碍了人类经济的发展。为了适应现代社会人们高度强烈的时间观念,用计算机对学校学生成绩进行管理已逐步取代了传统的管理方式。
学生成绩查询系统对学校加强学生成绩管理有着极其重要的作用。由于各个大学都在持续扩招,学生的数量日益庞大,传统的手工成绩管理不仅工作量大,而且容易出现问题。从而需要对学生成绩管理等工作方面提高精确度。
经过我对学校情况和师生需求的的具体分析,初步设计了一套有关“学生成绩管理”的程序,希望可以帮助学校改善以往需求紧张的管理系统,为广大师生提供方便,节省时间,提高工作效率,从而树立良好的办学形象。
学校具体需求分析
学生:对各科成绩的查询及查看本班成绩排名。
老师:输入并维护所教科目的学生成绩,计算本科的成绩排名、本科成绩在班上的排名。
班主任:输入并维护本班的基本信息,对本班的各科成绩汇总,计算各科成绩的总分,排名,本班平均分等需求。输出学生的基本信息,各科的成绩及各科成绩的部分,各科成绩的排名,总分的排名情况。
教务处: 学校全体成员的信息管理,对考试科目,时间及对所考科目的编号等进行具体的管理,并对任课老师,班主任等输入的信息进行存库,对学生的信息进行必要的维护,可打印学生的所有信息。
2.2 系统功能分析
在本章中,我使用模块等分析法进行系统功能分析。
2.2.1模块实现算法,在进入主菜单前,如图2-1所示:
按任意键进入
主菜单
合法用户
进入各功能模块
2
2-1进入主菜单模块
2.2.2进入主菜单,此时
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
在3.4软件结构会描述清楚。 2.2.3 建立学生表格,算法实现模式,如图2-2所示:
输入1
N返回主模块
进行编辑
Y
N 返回主模块
信息录入
Y
Y任意键返回主模块
继续输入
2-2建立学生表格模块
2.2.4从表中删除原有纪录模块,算法,如图2-3所示:
输入2
N返回主模块
进行删除
Y
N 返回主模块
信息录入
Y
Y任意键返回主模块
删除成功
2-3删除原有纪录模块
2.2.5显示单链表中所有记录模块,算法,如图3-4所示:
输入3
N返回主模块
进行输入
Y
N 返回主模块
信息输出
Y
Y任意键返回主模块
显示信息
3
2-4显示纪录模块
2.2.6按照姓名查找纪录模块,算法,如图2-5所示:
输入4
N返回主模块
学生姓名
Y
N 返回主模块
信息录入
Y
Y任意键返回主模块
查找成功
2-5查找模块
2.2.7计算所有学生的总分和均分模块,算法,如图2-6所示:
输入5
N返回主模块
进行计算
Y
Y任意键返回主模块
输出结果
2-6计算模块
2.2.8插入纪录到表中模块,算法,如图2-7所示:
输入6
N返回主模块
学号
Y
N 返回主模块
信息录入
Y
Y任意键返回主模块
成功插入
2-7插入纪录模块
2.2.9复制文件模块,算法,如图2-8所示:
4
输入7
N返回主模块
文件地址
Y
N 返回主模块
复制
Y
Y任意键返回主模块
复制成功
2-8复制模块
2.2.10将所有学生成绩排序模块,算法,如图2-9所示:
输入8
N返回主模块
进行排序
Y
Y任意键返回主模块
排序成功
2-9排序模块
-10所示: 2.2.11分类合计模块,算法,如图2
输入9
N返回主模块
进行分类
Y
Y任意键返回主模块
分类成功
2-10分类合计模块
2.2.12退出模块,算法。
5
第三章 总体设计
3.1软件描述
该程序的主要功能为: 0将表格初始化,1建立学生成绩表格,2从表中删除原有纪录,3显示单链表中所有记录,4按照姓名查找纪录, 5计算所有学生的总分和均分,6插入纪录到表中,7复制文件,8将所有学生成绩排序, 9分类合计,10退出。另外,该程序主要调用了:I/O函数(stdio.h),其他说明(stdib.h),字符串函数(string.h),屏幕操作函数(conio.h),内存操作函数(mem.h),字符操作函数(ctype.h),动态地址分配函数(alloc.h),定义常数。
3.2设计方法
本软件采用传统的软件开发生命周期的方法,采用自定向下,逐步求精的结构化的软件设计方法。
3.3软件结构
根据以上模块可得到总体结构系统才层次图,如图3-1所示:
6
学生成绩管理
初始化
建立学生成绩表格
删除记录
显示单链表中所有记录
按姓名查找记录
计算所有学生成绩的总分和均分
插入记录到表中
复制文件
将所有学生成绩排序
分类合计
退出
3-1总体结构系统层次图 3.4文件及函数组成
如表1-1所示:
表3-1 主要函数
函数名 功能
Init() 初始化函数
Create() 创建链表
Delete(STUDENT *h) 删除记录
Print(STUDENT *h) 显示所有记录 Search(STUDENT *h) 查找学生成绩
7
Computer(STUDENT *h) 计算学生的总分和均分 Insert(STUDENT *h) 插入记录 Copy() 复制文件 Sort(STUDENT *h) 按姓名开头字母排序 Total(STUDENT *h) 分类合计 Menu_select() 主菜单函数
1.显示内存动态记录数据函数
函数原型:void create()
功能:显示内存里的记录
参数:记录数组和记录条数
要求:报告是否有记录及记录成绩内容
2.输入信息函数
函数原型:int inputs(char *prompt, char *s, int count)
功能:添加记录
参数:结构体数组.
要求: 如果内存已经存在记录.则将新记录追加在记录尾部,如果还没有建立记录链表,
则建立链表并从尾部开始追加记录.
3.删除记录函数
函数原型:int delete(STUDENT *h) 功能:删除内存链表中的指定结点
参数:记录数组和记录条数,成绩
要求:给出相关信息
4.按序号显示记录函数
函数原型:void print(STUDENT *h) 功能:根据用户需求输出记录
要求:判断内存中记录的序号与输入的是否相等,如果相等则输出,否则关闭文件
5.查找函数
函数原型:int search()
功能:根据用户需要输出记录
参数:记录数组和记录成绩以及姓名s
要求:判断内存中记录的名字与输入的是否相等,如果相等则输出,否则提前结束
6.计算函数
函数原型:int Computer(STUDENT *h) 功能:根据用户需要计算总分和学生平均成绩
参数:记录数和计算
要求:内存中记录数进行相加和平均数运算
7.插入记录函数
函数原型:int insert(STUDENT *h)
8
功能:根据用户指定将信息插入特定位置
参数:结构体数组和记录数
要求:输入信息
8.复制文件函数
函数原型:void copy()
功能:复制记录
要求:判断所要文件是否能打开,打不开则退出,能打开则读出文件中记录并复制
9.排序函数
函数原型:void sort(STUDENT *h) 功能:将记录进行排序
参数:结构体数组和记录数
要求:比较内存中记录,判断大小并进行交换,交换后显示排序成功 10(分类合计函数
函数原型:void Total(STUDENT *h) 功能:分类存放
参数:结构体数组和记录数
要求:在内存中分类存放各班不同的记录数和计算后得到的记录数 11.菜单函数
函数原型:menu_select()
功能:控制程序
要求:管理菜单命令并完成初始化
9
第四章 程序调试
在设计该程序的时候我采用了结构化程序方法编辑,并在源代码的基础上添加了中文注释。但是在该系统的编写过程中仍然有许多错误,主要的有:注释文字的排版,定义错误,句式的语法错误。
在完善程序时,我将源代码先打印下来反复的捉摸和研究,力图在上机运行时先改正一些低级错误.如缺少”;”之类.在仔细检查之后,将源代码上机调试—进行编译,在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正„„直到顺利显示我预期的。
1、首先,在本次调试过程中我碰到了在上机前根本没有想到的错误:在注释的时候,注释文字应写在一起中间不能有中断,不能再其中包含c语言的语句。否则会引起错误,例如格式不正确或是多了字符等。
2、缺少变量定义或是定义位置不正确;
由于该程序相对来讲稍有些长,前后有些变量很难联系起来,但是在错误信息的提示下一般还是很是可以找到。不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。 3、句式的语法错误;
大多的语法错误在通过书本参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。这些语法错误有信息框的提示一般是能够排除的。
编译、连接的成功并不意味着程序的最终成功。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。这种错误的查找是最难的,需要编程序的人有相当的耐心和细心去把问题找出来。这也是本次程序编辑过程中碰到的最大的难题。往往运行之后得不到另人满意的结果,此时解决的方法一则可以用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,或用debug进行调试,对检查出的错误进行修改,当调试完毕将设置的printf都删去。若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。如此循环往复,直到最后程序运行成功。在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,我怀疑是哪个对方对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,例如在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。以上是调试的全过程。
10
第五章 使用说明
首先进入界面时,根据屏幕上的提示press any key enter menu„„即是按任意键均可进入主菜单,考虑到学生成绩大多由老师输入和调用,所以这里对使用者没有要求也就没有添加密码的必要。
在进入主菜单时可以看到这样的画面,如图4-1所示:
4-1主菜单
从0到10共有11个功能键。此时应该根据提示”Enter your choice (0-10):”选择自己需要用的功能,例如:在提示后按1再回车(Enter键)的话就会进入编辑。 在主菜单上的11个功能分别是:
0 init list将表格初始化:使用0后,系统会将原有的一切记录全部删去,所有的恢复到位使用时。一切在主菜单上完成。
1 Enter list建立学生成绩表格:使用1后,在界面上会要求你输入学号no,姓名name
。如果已经输入完毕只要在下一个no后输入~再按回车键即可,此和成绩score1、2、3
时就会回到主菜单,如图4-2所示:
11
4-2输入界面
2 Delete a record from list从表中删除原有纪录:使用2 后,会进入子界面,提示语会告诉你输入你要删除的信息的学生的学号,然后会出现“ list no ** student”这就表示删除成功,如果没有这个学生的信息则会跳过步执行但是还是会输出上述的句子,如图4-3所示:
4-3显示删除界面
3 print list显示单链表中所有记录:如果是在执行完5以后,那么总分和均分一栏就不会空白,而是会输出计算后的数据,如图4-4所示:
12
4-4打印数出界面
4 Search record from list按照姓名查找纪录:根据提示”please enter students’name for search”输入学生的拼音拼写的姓名,如图4-5所示:
4-5查找界面
5 compute the score计算所有学生的总分和均分:按5后,系统会自动计算然后输出结果,如图4-6所示:
13
4-6计算界面
6 insert record to list插入纪录到表中:使用6 时,要输入你想插到哪一个学生前,只需输入他的学号。然后,在提示语的提醒下输入要插入学生的学号,姓名和成绩。然后再进入打印界面,此时可以看到已经将09插入到02 前。如图4-7所示:
4-7插入后界面
7 copy the file to new file复制文件:执行完7后,会根据使用者输入的地址和命名生成文本文档存储。
8 sort to make new file将所有学生成绩排序:在完成后,会出现”sort success!” 如果想看结果的话,可以在执行完这一步后在执行3,这样就可以看到排序后的结果。
14
9 total on nomber分类合计,如图4-9所示:
4-9分类合计界面 10 Quit退出模块,在主菜单上实行。如图4-10所示:
15
4-10退出界面
16
第六章 工作总结
在这次的编程过程中,我不仅在C语言的学习上有了很大的提高而且也培养了我的毅力、耐心、决心和学习能力。短短的两周,我自己都不敢相信可以弄好一个对我而言一个大而功能相对而言还可以的程序。
但是不得不说在这个程序中仍然有许多的缺陷,诸如:计算均分时只能计算三门的总均分;无法将文件以文档或是表格形式存储;排序、删除等必须以一种形式先查找学生信息然后再实行操作并不多样化。总之,在这个过程中我还面对了程序无法执行,改错时怎么也找不到错误在哪里的困境;但我还是在老师和同学们的帮助下完成了这个程序。
可以说我的心情是相当的激动,相信有了这样的经历后我能够更加娴熟的面对各种情况。
注:课程设计以来的感想、心得、经验、收获、有待改进的方面。不超过一页。
17
参考文献(参考书或论文或文章)
[1] 黄明等.21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005:45—208
[2] 马靖善等.C语言程序设计.清华大学出版社,2005:23—145
18
附录 源代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "mem.h"
#include "ctype.h"
#include "alloc.h"
#define N 3
typedef struct z1
{
char no[11];
char name[20];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init(); STUDENT *create();
STUDENT *delete(STUDENT *h); void print(STUDENT *h); void search(STUDENT *h); void save(STUDENT *h); STUDENT *load(); void computer(STUDENT *h); STUDENT *insert(STUDENT *h); void append(); void copy(); STUDENT *sort(STUDENT *h); void total(STUDENT *h); int menu_select(); main()
{
int i;
STUDENT *head;
head=init();
19
clrscr();
for(;;)
{
switch(menu_select())
case 0:head=init();break;
case 1:head=create();break;
case 2:head=delete(head);break;
case 3:print(head);break;
case 4:search(head);break;
case 5:computer(head);break;
case 6:head=insert(head); break;
case 7:copy();break;
case 8:head=sort(head);break;
case 9:total(head);break;
case 10:exit(0);
}
}
}
menu_select()
{
char *menu[]={"***************MENU***************",
" 0. init list",
" 1. Enter list",
" 2. Delete a record from list",
" 3. print list ",
" 4. Search record on name",
" 5. compute the score",
" 6. insert record to list ",
" 7. copy the file to new file", /*复制文件*/
" 8. sort to make new file", /*排序*/
" 9. total on nomber", /*分类合计*/
" 10. Quit"}; /*退出*/
char s[3];
int c,i;
gotoxy(1,25);
printf("press any key enter menu......\n");
getch();
clrscr();
gotoxy(1,1);
20
textcolor(BLUE);
textbackground(WHITE);
gotoxy(10,2);
putch(0xc9);
for(i=1;i<44;i++)
putch(0xcd);
putch(0xbb);
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba);
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8);
for(i=1;i<44;i++)
putch(0xcd);
putch(0xbc);
window(11,3,53,19);
clrscr();
for(i=0;i<16;i++)
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(GREEN);
window(1,1,80,25);
gotoxy(10,21);
do{
printf("\n Enter you choice(0~10):");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>10);
return c; }
STUDENT *init()
{
return NULL;
}
STUDENT *create()
{
21
int i; int s;
STUDENT *h=NULL,*info;
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\nout of memory");
return NULL;
}
inputs("enter no:",info->no,11);
if(info->no[0]=='!') break;
inputs("enter students' name:",info->name,20);
printf("please input %d score \n",N);
s=0;
for(i=0;i
score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("Data is bad ,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info;
}
return(h);
}
inputs(char *prompt, char *s, int count) {
char p[255];
do{
printf(prompt);
scanf("%s",p);
if(strlen(p)>count)printf("\n too long! \n");
22
}while(strlen(p)>count);
strcpy(s,p);
}
void print(STUDENT *h)
{
int i=0;
STUDENT *p;
clrscr();
p=h;
printf("\n\n\n****************************STUDENT***************************
*****\n");
printf("|Rec|No | Name | Sc1| Sc2| Sc3| Sum | Ave
|Order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|----
-|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i,
p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*******************************
**\n");
}
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q;
char s[11];
clrscr();
printf("please deleted no\n");
scanf("%s",s);
q=p=h;
while(strcmp(p->no,s)&&p!=NULL)
{
23
q=p;
p=p->next;
}
if(p==NULL)
printf("\nlist no %s student\n",s);
else
{
printf("*****************************have
found***************************\n");
printf("|No | Name | Sc1| Sc2| Sc3| Sum | Ave
|Order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n
");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n
");
getch();
if(p==h)
h=p->next;
else
q->next=p->next;
free(p);
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");
}
return(h);
}
void search(STUDENT *h)
{
STUDENT *p;
char s[15];
clrscr();
printf("Please enter students' name for search\n");
scanf("%s",s);
p=h;
24
while(strcmp(p->name,s)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("\nlist no %s student\n",s);
else
{
printf("\n\n*****************************havefound***************************\n");
printf("|No | Name | Sc1| Sc2| Sc3| Sum | Ave |Order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info;
char s[11];
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s);
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\nout of memory");
return NULL;
}
inputs("enter no:",info->no,11);
inputs("enter name:",info->name,15);
printf("please input %d score \n",N);
s1=0;
25
for(i=0;iscore[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i];
}
info->sum=s1;
info->average=(float)s1/N;
info->order=0;
info->next=NULL;
p=h;
q=h;
while(strcmp(p->no,s)&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
if(p==h)
h=info;
else
q->next=info;
else
if(p==h)
{
info->next=p;
h=info;
}
else
{
info->next=p;
q->next=info;
}
printf("\n ----have inserted %s student----\n",info->name);
printf("---Don't forget to save---\n");
26
return(h);
}
void copy()
{
char outfile[10],infile[10];
FILE *sfp,*tfp;
STUDENT *p=NULL;
clrscr();
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile);
if((sfp=fopen(infile,"rb"))==NULL)
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n");
scanf("%s",outfile);
if((tfp=fopen(outfile,"wb"))==NULL)
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp))
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break;
fwrite(p,sizeof(STUDENT),1,tfp);
}
fclose(sfp);
fclose(tfp);
printf("you have success copy file!!!\n");
}
STUDENT *sort(STUDENT *h)
{
int i=0;
STUDENT *p,*q,*t,*h1;
h1=h->next;
h->next=NULL;
while(h1!=NULL)
27
{
t=h1;
h1=h1->next;
p=h;
q=h;
while(t->sumsum&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==q)
{
t->next=p;
h=t;
}
else
{
t->next=p;
q->next=t;
}
}
p=h;
while(p!=NULL)
{
i++;
p->order=i;
p=p->next;
}
printf("sort sucess!!!\n");
return h; }
void computer(STUDENT *h) {
STUDENT *p;
int i=0;
long s=0;
float average=0;
p=h;
while(p!=NULL)
28
{
s+=p->sum;
i++;
p=p->next;
}
average=(float)s/i;
printf("\n--All students sum score is:%ld average
is %5.2f\n",s,average); }
void total(STUDENT *h) {
STUDENT *p,*q;
char sno[9],qno[9],*ptr;
float s1,ave;
int i;
clrscr();
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h;
while(p!=NULL)
{
memcpy(sno,p->no,8);
sno[8]='\0';
q=p->next;
s1=p->sum;
ave=p->average;
i=1;
while(q!=NULL)
{
memcpy(qno,q->no,8);
qno[8]='\0';
if(strcmp(qno,sno)==0)
{
s1+=q->sum;
ave+=q->average;
i++;
q=q->next;
}
else
29
break;
}
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break;
else
p=q;
}
printf("---------------------------------------------\n");
}
30
C语言课程设计心得体会
编程是一件很枯燥、乏味的事情,在这个编程过程中我曾经想放弃过,因为实在复杂,太费时,但是最终我还是说服了自己坚持了下来,看到自己最后的作业,虽然不是很优秀,但是还是充满了自豪与满足感。
经历了这次程序的编辑之后,发现里面其实是充满乐趣的,本来大家都认为花两周的时间来编一个大作业未免时间太短了,但是事实证明两周的时间只有真正利用起来还是能做出优秀的作业。在这短短的两周里,我感受了挫折、激动、自我否定、自我肯定等等的心理状态。可以说在这一次后,我不仅是能力有了很大的提高连同心理也成熟了很多。
总之,编程尤其是调试是一项细致需要很多耐心的工作,需要下工夫、动脑子、甚至是逆向思考可能的错误,不过,正因为如此这往往能反映出一个人的水平、经验和科学态度。
指导教师评语
成绩评定为:
指导教师(签字):
年 月 日
31