资源描述
课 程 设 计 报 告
课程名称 C语言程序设计
设计题目 学生成绩管理系统
专 业 地球信息科学和技术
1月 6日
学生成绩管理系统课程设计
报 告
目录
l 一.课程设计目标………………………………(3)
l 二.内容和要求…………………………………(3)
l 三.程序设计说明及其步骤图…………………(4)
一、设计目标:
1、深入掌握和利用C语言进行程序设计能力;
2、深入了解和利用结构化程序设计思想和方法;
3、初步掌握开发一个小型实用系统基础方法;
4、学会调试一个较长程序基础方法;
5、熟悉链表操作;
6、学会利用步骤图或N-S图表示算法;
7、学会怎样将信息保留到文件;
8、掌握怎样书写程序设计汇报。
二、 设计内容和要求:
(1)设计内容
1、每一条统计包含一个学生学号、姓名、4门课成绩及其总分;
2、输入功效:能够完成统计输入;
3、显示功效:完成全部学生统计显示;
4、查找功效:完成按学号或姓名查找学生统计,并显示;
5、删除功效:完成一个学生信息删除;
6、排序功效:按学生学号或总分高低进行排序
7、插入功效:按学号次序插入一条学生统计;
8、保留文件:将学生统计到一个文件中;
9、打开文件:能够将学生信息从保留文件中读取出来;
10、菜单:提供一个界面来调用各个功效。
(2)设计要求:
有简单操作界面, 用户能够经过数字选择以下功效:
1、录入成绩.(链表建立,每个结点包含:学号、 姓名、数学、物理、英语、计算机、总分);
2、输出成绩.(链表输出,按学号排序、按总分排序) ;
3、查找成绩.(按学号或姓名查找结点, 按学号次序插入结点,按学号或姓名删除结点);
4、保留到文件, 和从文件中读出。
三、程序设计说明及其步骤图
整个系统除了主函数外,另外还有14个函数,其中两个个函数作用分别为首次使用该系统时欢迎界面和是否选择进行文件导入,其它函数实现八大功效:输入功效、显示功效、查找功效、排序功效、插入功效、删除功效、保留功效、读取功效。各个函数具体设计说明分别以下:
1、 学生成绩管理系统关键算法步骤图
开始
是否导入文件信息
N
Y
导入文件信息
主函数
退出系统
保留信息
查询信息
插入信息
打开文件
显示信息
修改信息
添加信息
删除信息
2、 begin函数
简单利用printf输出一个欢迎界面,没有其它需要说明地方。
3、 yourchoice函数
N-S步骤图:
输入choice值,选择下一步操作
choice=1 choice=2
实施load函数,进行文件信息导入
实施menu函数,跳转到菜单界面
换 行
利用一个switch语句,给用户一个对文件进行操作机会。
4、 输入函数
算法:利用指针pp申请一个空间,用来创建链表,用pp->next=NULL初始化链表,假如链表为空,则将目前输入结点作为首结点,即head=p1=pp,当链表不为空时,目前输入即pp所指结点放在p1所指结点,并使pp指向刚才p1所指向结点,当需要继续添加信息时,能够输入y,当接收字符y时,满足循环条件,继续一个循环输入,结束输入时,利用一个for循环把输入信息顺便输出到屏幕上,便于检验和查看。
算法步骤图:
开始
开始是开始
pp->next=NULL
getchar()='y'
N
Y
输入学生信息
原来链表为空
Y N
head=p1=pp
p1->next=pp
p1=pp
getchar()='y'
Y
N
显示输入信息
结束
5、 删除函数
算法:从p1指向第一个结点开始,检验该结点中学号number或姓名name是否是输入那个需要删除结点对应学号或姓名。假如相等就将该结点删除,如不相等,就将p1向后移动一个结点,如此进行下去,直到碰到表尾为止。
N-S步骤图:
链表是一个空表
真 假
输出
“空表”
p1=head
numberp1->number或namep1->name,而且p1
所指结点不是表尾结点
P2=p1(p2后移一个位置)
P1=p1->next(p1后移一个位置)
P1是要删除结点
是 否
p1是所指是头结点
是 否
输出“成绩表中午该学生信息!
”
Head=p1->next
(删除头结点)
P2->next=p1->next
(删除一个结点)
6、 插入函数
算法:先将学生成绩按平均分由高分到低分进行排序,再插入一个新生结点,要求按平均分高低次序插入。先用指针变量pp指向待插入结点,p1指向第一个结点。假如p0->number<p1->number,则待插入结点不应插在p1所指结点之前。此时将p1后移,并使p2指向刚才p1所指结点。反复以上步骤,直到pp->number>=p1->number为止。这时将pp指向结点插到p1所指结点之前。不过假如p1所指已是表尾结点,则p1就不应后移了。假如pp>number比全部结点number全部小,则应将pp所指结点插到链表末尾。假如插入位置既不在第一个结点之前,又不在表尾结点以后,则将pp值赋给p2->next,使p2->next指向待插入结点,然后将p1值赋给pp->next,使得pp->next指向p1指向变量。假如插入位置为第一个结点之前,则将pp赋给head,将p1赋给pp->next。假如要插到表尾以后,应将pp赋给p1->next,NULL赋给pp->next。
p1=head, pp=new
原来链表是空表
是 否
将pp所指 当pp->number<p1->number 和p1所指向不是表尾
结点作为 结点
唯一结点 p2指向p1位置 p1向后移一个结点
pp->number>=p1->number
是 否
p1指向头结点 p1->next=pp
是 否 pp->next=NULL
head=pp p2->next=pp (插到表尾以后)
pp ->next=p1 pp->next=p1
(插到表头之前) (插到表中间)
n=n+1;(结点加1)
N-S步骤图:
7、 查询函数
算法:采取线性查找法往下一个节点查找。输入所要查找学生学号s,设一个指针变量p,先指向第一个结点,当strcmp(p1->number,f_number)!=0&& p != NULL或strcmp(p1->name,f_name)!=0&& p != NULL时,使p后移一个结点,假如p!=NULL,输出p所指结点。
8、 修改函数
算法:把头指针赋值给p1,假如链表为空,则显示无学生成绩,假如不为空,则从键盘输入需要修改方法,学号或姓名,然后利用p1进行查找。当p1指向不是所要找结点时,若p1->next==NULL,及链表只有一个结点信息,则输出无此学生信息;若有多个学生信息,则循环进行查找查对,直到找到需要修改结点,找到要改结点后,输出该结点信息,并选择需要修改单项,进行修改。
N-S步骤图:
p1=head
head=NULL
真 假
输出无该学生信息
修改方法switch(a)
a=1 a=2
输入学号 输入姓名
p1指向不是要找结点
真 假
p2=p1
p1=p1->next
输入要改项目
输入信息
修改成功!
9、 显示函数
算法:先将p结点指针指向第一个结点,将p1结点(即第一个结点)数据输出。然后再将p结点指针指向p1指针指针(即下一结点),将p结点(即第一结点)数据输出。反复实施此步聚直到p1指针指向NULL为止。
10、 排序函数
算法:当后一个结点中总分比前一个结点中总分要大,将p1指向结点中信息全部转换到中间变量temp, p2指向结点中信息赋给p1指向结点中,将中间变量temp中信息赋给p2所指向结点,进行循环比较排序。
11、 保留文件函数
N-S步骤图:
输入要保留统计文件地址outfile
文件不能打开
否 是
p1=head;
输出一个犯错信
当p1不为空时 息,并返回菜单
fwrite(p1,LEN,1,fp); (写入一条统计)
p1=p1->next; (指针后移)
fclose(fp); (关闭文件)
12、 读取文件函数开始
输入文件名
fp=fopen(infile,"rb"))==NULL
Can not open file
Y
N
申请空间
i==0
Y N
head=p2=p1
p2->next=p1;
p2=p1;
i++
输出信息
p1->next!=NULL
Y
N
fclose(fp)
结束
四、 运行结果截屏分析
运行程序后,屏幕上显示欢迎界面,并提醒用户是否导入已保留信息:
假如选择1,则能够导入已经有文件中信息,以下:
假如选择不导入,则直接进入菜单界面:
当进入主菜单后,建立新成绩表,可选择2添加信息,每添加一个学生信息,会自动计算此学生总分并显示,假如需要继续输入其它学生信息则输入'y',假如不需要则将已输入学生信息显示在屏幕上,然后跳转到菜单界面:
当需要查询单个学生信息时,输入1,能够按学号或姓名进行查询:
(1) 按学号查询
(2) 按姓名查询
删除信息:
当查询刚才删除学生信息时,显示成绩表中无该学生信息,即删除成功:
展开阅读全文