题目:院、 系:计算机科学与工程学院。
学科专业: 网络工程
学生: 潘佳伟。
学号: 090612110
指导教师: 梁晨。
2023年12月。
目录。1课程设计的题目3
2课程设计的目的(设计要解决的问题)--3
3概要设计(函数划分、总体设计4
4详细设计(流程图、程序5
5调试结果11
6课程设计总结11
7心得体会11
课程设计的题目课程设计的目的。
要求:每组4—5人,共同完成,交1份设计报告,成员按贡献大小给出顺序。
题目名称:学生成绩管理系统
设计内容:设计一个学生成绩管理系统,对本学期的本班的学习成绩进行管理,可以用数组来设计这个程序,具有查询和检索功能,1、设计内容
1) 每一条记录包括一个学生的学号、姓名、性别、各门课成绩(本学期的科目)、平均成绩。
2) 输入功能:可以一次完成若干条记录的输入。
3) 显示功能:完成全部学生记录的显示。
4) 查找功能:完成按姓名或学号查找学生记录,并显示。
5) 排序功能:按学生平均成绩进行排序。
6) 插入功能:按平均成绩高低插入一条学生记录。
7) 将学生记录存在文件中。
8) 应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
2、设计要求
已知有存储本班学生记录(包括学号、姓名、科目成绩、性别)的文件所有学生以学号从小到大排序(该文件自行建立)。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下:
1) 要求显示如下界面 1查询 2排序 3插入 4删除 , 通过选择1-4来确定要做哪一个操作。
2) 若选1,则出现如下界面 1.1按学号查询 1.2按姓名查询 1.
3按成绩查询 ,通过选择1.1-1.3来确定要做哪一个操作,其中:
按姓名查询用顺序法实现;按成绩查询实现查询成绩小于60分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。
3) 若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。
4) 若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件中。
5) 若选4,删除指定学生的记录,并把结果保存到文件中。
6) 不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等
7) 以上各个功能均编写成子函数,由主函数调用实现。
8) 利用结构体数组实现学生成绩的数据结构设计;
9) 完成设计任务并书写课程设计报告。
最终成绩=平时20%+答辩40%+**40%
概要设计(函数划分、总体设计)
整个系统除了主函数外,另外还有10个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:
1、 主函数 main()
利用无限次循环for(;;和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、 初始化函数 student *init()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为null。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
3、 菜单选择函数 int menu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4、 输入记录函数 student *create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。
算法:先声明一个首节点head,并将head->next设为null。每输入一个数据就声明一个新节点p,把p->next设为null,并且链接到之前列表的尾端。
5、 显示记录函数 void print(student *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向null为止。
6、 查找记录函数 void search(student *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。
算法:采用线性查找法往下一个节点查找。输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s) &p !
=null时,使p后移一个结点,如果p!=null,输出p所指的结点。
7、 删除记录函数 student *delete(student *head)
这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“y”进行删除。
算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。
8、排序函数 student *sort(student *head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
8、 插入函数 student *insert(student *head,student *new)
这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。
算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。先用指针变量p0指向待插入的结点,p1指向第一个结点。
如果p0->**erage**erage,则待插入的结点不应插在p1所指的结点之前。此时将p1后移,并使p2指向刚才p1所指的结点。重复以上的步骤,直到p0->**erage>=p1->**erage为止。
这时将p0指向的结点插到p1所指结点之前。但是如果p1所指的已是表尾结点,则p1就不应后移了。如果p0->**erage比所有结点的**erage都小,则应将p0所指的结点插到链表末尾。
如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2->,使p2->next指向待插入的结点,然后将p1的值赋给p0->next,使得p0->next指向p1指向的变量。如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0->next。如果要插到表尾之后,应将p0赋给p1->next,null赋给p0->next。
最后再调用排序的函数,将学生成绩重新排序。
10、保存数据到文件函数 void s**e(student *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
11、从文件读数据函数 student *load()
这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。
详细设计(流程图、程序)
#include<>
#include<>
struct student
int num;
char name[20];
char sex;
float math;
float english;
float c_program;
float **erage;
stu[45]=,void sort该函数用于排序学生成绩采用冒泡法 */
int i,j,m;
struct student temp;
for(i=0;ifor(j=i+i;jif(stu[i].**e
void delect该函数用于删除学生成绩*/
int i,t;
long num;
printf("please enter number which you want to delect:")
scanf("%ld",&num);
printf("");
for(i=0;i<45;i++)
if(stu[i].num!=num)
printf("the number is not exist!!!n");
else(stu[i].num==num) t=i;
for(i=t;i<45;i++)
stu[i]=stu[i+1];
printf("please input 0 to continue");
scantf("%d",&m);
if(m=0) go to loop_1;
else go to loop_2 ;
return()
void insert该函数用于插入学生成绩*/
int i,n,t;
struct student s;
printf("please input record");
printf("no: name: math: english: c_programe: **erage: ")
for(i=t;i<45;i++)
if(stu[i]=0)
scanf("no:%9dname:%20smath:
%fenglish:%fc_programe:%f**erage:
%f",stu[i].num,&stu[i].name,&stu[i].
sex,&stu[i].math,stu[i].english,&stu[i].
c_programe,&stu[i].**erage);break;
printf("please input 0 to continue");
scantf("%d",&m);
if(m=0) go to loop_1;
else go to loop_2;
return()
struct search (float f,int num,char name[20],int i,int m); 对将用到的四个函数进行声明*\
void sort()
void delect()
void insert()
loop_1: void main()
printf学生成绩管理系统");
printf("1查询。
2排序。3插入。
4删除");
scanf("%d",&n);
if(n=1);
else if (n=2);
else if (n=3);
else if (n=4);
else printf("输入错误");
#include<>
#include
loop_2:struct search (float f,int num,char name[20],int i,int m该函数用于查找学生成绩*/
C语言程序课程设计
重庆理工大学。课程设计。课程 c语言程序设计课程设计 题目职工信息管理系统设计。院系名称数学与统计学院。班级 110010101 学生姓名杨秋燕学号 11001010128 指导教师陈媛李娅。评阅教师。时间 2011 6 23 1 问题描述。5 1题目一 职工信息管理系统设计。职工信息包括职工号 姓...
C语言程序课程设计
作者 panhongliang 仅供个人学习。c语言程序设计。课程设计报告。完成任务 1 用二分法求方程根。2 矩阵求逆。3 链表制作。4 二十四点游戏。5 学籍管理程序。专业 计算机科学与技术。班级 计二班。学号 0705010225 姓名 李海波。本人于2008年9月1号在计算机中心6号机房25...
C语言程序课程设计
课程设计。课程名称 语言程序课程设计 学生学院福州职业技术学校 专业班级技术工程系 09应用电子 3 班。学号 200902013325 学生姓名郑长树 指导教师刘焕军 2010年12月30日。福州职业技术学院课程设计任务书。题目名称建立一个可以可以随时检索 删除 或增加新记录,保存或取消新的记录的...