C语言程序课程设计

发布 2022-10-03 03:41:28 阅读 3724

题目:院、 系:计算机科学与工程学院。

学科专业: 网络工程

学生: 潘佳伟。

学号: 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日。福州职业技术学院课程设计任务书。题目名称建立一个可以可以随时检索 删除 或增加新记录,保存或取消新的记录的...