关键词不能为空

当前您在: 主页 > 高中公式大全 >

C语言学生学习成绩管理系统实验报告

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-24 15:52
tags:

庞大的反义词-bully什么意思

2021年1月24日发(作者:姚子羚)
C
语言学生学习成绩管理系统实验报告

学生学习成绩管理系统

1.
课程设计的目的

1
.对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
2
.掌握
自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。

3
.熟练掌握
C
语言的基本语法,灵活运用各种数据类型。

4
.进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察

表达式,分块调试)和修改程序。
2.
课程设计的要求

1
.程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全

和提示具有良好的交互功能。
2
.设计中的每一个小功能均由子函数来完成

3
.提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上
机的内

,高效、独立地完成这次设计任务

4
.在硬盘上建立自 己的目录,将程序文件存储到该目录下,即有利于调试文件,又保证
了文件的安全性。
3.
课程设计报告内容
3.1
任务定义

本系统主要应用数据结构 的设计思想,在
TC
环境下运用
C
语言进行编程设计一个学生成
绩管 理系统,该系统主要实现对学生的学号、姓名等自然信息以及学生成绩信息进行创建、
增加、删除、查询 、插入、显示的功能以及计算所有学生总成绩的总分,并依照学生各类
信息高低进行排名的功能。系统给 用户提供了一个简单的人机界面,使用户可以根据提示
输入操作项,调用系统提供的管理功能。

3.2
系统运行环境

操作系统:
Windows 98/2000/XP
运行软件:
TC

3.3
功能需求(问题分析)

学生成绩管理系统为教师和学生提供了一个对 学生自然信息和学科成绩进行管理和查看的
平台,给用户提供了一个简单友好的用户接口,功能需求分析 描


1
)编写菜单函数,为用户提供一个友好的操作选择界面。


2
)学生信息输入:用户根据提示输入学生的学号、姓名、各科成绩,可一次

性输入多条学生的成绩信息记录;当要停止输入并退回主菜单时,只须输入
0
符号 回车
即可。


4
)学生信息删除:提示用户输入要删除的学生学号 或姓名,如果输入的学号

不存在,系统会立即提示不存在该学号的学生请先添加。


6
)学生信息添加(插入):使用户可以根据提示在原有的学生成绩表中的任何
位置添加新的学生信息记录。


7
)学生信息查询:根据系 统提示输入要查找的学生名字或学号回车后,即可

显示已找到的学生信息记录。


8
)学生成绩计算:系统能够自动计算所有学生的总成绩。

(< br>9
)学生成绩排序:按照
系统提示选择项目进行从高分到低分排序。


10
)学生信息清单显示:系统显示所有学生的信息情况,包括学生学号、姓名、各科
成绩、个人总成绩。


11
)系统退出:实现用户退出本系统的功能。
3.4
程序设计步骤
1.
大体结构图

2.
主程序模块分析

整个系统功能共分八个功能
: dent

学生信息添加

udent
学生信息修改
dent
信息清单删除
udent
学生信息排序

udent
学生成绩查找
udent
载入文件信息
udent
学生信息保存


系统退出

以上八个功能就是本系统模块的主要功能,根据需求分析,对其进行功能逻辑设计:


1
)定义数据结构
typedef struct student{ ??}stu;
。以下分别要用到的函数为:菜单函数
void showmenu()
的函数,定位链表中符合要求的接点
stu* Locate(stu *s,char find[],int k)
用于插入和查找功能,删除记录函数
status delstudent(stu *s)
,显示所有记录的函数
void
show(stu *s,int k)
,显示学号对应的姓名
void showid(stu *s))
,排序函数
status list(stu
*s,int k),
添加记录函数
status addstudent(stu *s),
查询函数
status findstudent(stu *s)
载入
文件信息
status loadstudent(stu *s),
保存学生
status savestudent(stu *s),
关闭
exit(0);


2
)学生信息输入:实现可以输入学生的学号、姓名、 各科成绩的功能。首先定义指向
结构体的指针,动态申请空间;用
if(k == 0) br eak;
实现当学号首字符为
0
则结束输入的
功能;在
for
循环中嵌套
while{}{}
,实现
N
门课程循环
N
次 和成绩正确输入
,
接着用到了
数据结构的新结点插入的知识。

(< br>3
)学生信息删除:实现输入要删除的学生学号,执行后就可以删除该学生所有信息。
该 功能用到
status delstudent(stu *s)
删除记录的函数
,< br>先定义
p
为查找到要删除的结点指

,
如果还没信息则显示添 加,函数返回到
Locate
,否则通过
while(r->next != p) r = r-
>next; r->next = p->next; free(p)
;确定要删除的项目。


4
)学生信息清单显示: 系统显示所有学生的信息情况,包括学生编号、学号、姓名、
各科成绩、个人总成绩。这里用到显示函数 实现输出链表中结点信息的功能。


5
)学生信息查询:根据系统提示输入 要查找的学生名字或学号回车后,即可以排列的
形式显示已找到的学生信息记录,接着自动跳到主菜单。 用到
status

findstudent(stu *s)
查找函数。


6
)学生成绩计算:利用
allscore=mscore+escore+cscore
求得
.

7
)学生信息添加:直
接用用
addstudent
函数添加。
< br>(
8
)学生成绩排序:选择并执行该功能后,系统提示使按学号,各科成绩或总成绩排列 ,
选择后系统自动按降序排列。


9
)系统退出:实现用户退出本 系统的功能。其实这里只用到了一个
exit(0); 3.5
流程图

3.6
详细设计
1.
函数原型

void showmenu()
菜单函数

stu* Locate(stu *s,char find[],int k) /*
结点添加(插入)
*/ status delstudent(stu *s) /*
删除
记录
*/ void show(stu *s,int k) /*
显示所有记录的
*/ void showid(stu *s) /*
显示学号对应的
姓名
*/ status list(stu *s,int k) /*
排序
*/ status addstudent(stu *s) /*
添加记录
*/

空时停止并返 回主菜单选择。直接在输出数值时添加
mscore+escore+cscore
作为总成绩
加到信息最后一列。


4

show
函数

为了能让用户输入字符串, 依然是定义一个开关,此时的开关条件无最大值,添加信息时
直接调用
show
函数即 可实现学生信息的输入。


5

printf
函数

编写显示函数用来输出链表中结点信息,
stu
型指针
r
,接着< br>r=*s
初值为头指针,用
printf
方法输出存储学生信息,最
w hile(r!=NULL){??}
实现当表中有信息即不为空,就执

while
中的内容,打印出学生的各个信息。


6

delete
函数

用来删除记录,先用
if(!s->next) {printf(
验证学生
信息是否为空,如果为空则输出
“please add first”
。如果不为空,先选择按学号删除或按
姓名删除,然后调用函数
stu* Locate(stu *s,char find[],int k)
查找要删除的记录。然后用
freep
()执行记录清空。


7

insert
函数

用来插入学生记录,定 义二个指针为
p

l

l
为前驱,
p
为插 入数据的位置。如果遇到
相同学号的则显示输入有重复并显示原来学号的信息。如不然则用
sc nf

printf
输入输
出数据,并在运行结束后把指针置尾。


8

sort
函数

根据不同的要求实现成绩从 大到小排列,程序中采用的使选择法进行排序,排序过程中调

swap
函数实现数据 的排列。这样就能按不同要求把数据排列了



3.8
程序调试与测试(结果分析)
1.
函数主界面

2.
选择第一项实现添加数据如下

3.
选择
2
进行修改编辑

4.
选择
3
进行删除成绩

5.
选择
4
进行排序显示成绩

6.
选择
5
进行查找成绩

7.
选择
6
提供载入信息条数

8.
选择
7
保存

9.
选择
0
关闭

要保存选
Y
不想保存先
N


程序运用了结构体,链表,转换和选择法排序实现了删除,添加,信息载入,查询等功能。
< br>(
1
)单链表查找算法的最好的时间复杂度为
o

1
),最坏时间复杂度
o

n
),平均时
间复杂度
o

n
);空间复杂度为
o

1
)。

(< br>2
)单链表插入算法时间复杂度
o

n
);空间复杂度为o

1
)。


3
)系统基本上实
现了小型学生管理系统的功能。
4.
总结

C
语言使上学期教的,现在开始做这个课程设计刚开始有点仿偟, 不知道何从下手,最后
搬出书本有看了一下,网上查点资料,仔细阅读老师给的任务指导书,开始着手做 这个学
生成绩管理系统,其原因使该算法简便,程序贴近学生生活,该程序的目的使实现学生成
绩的粗略管理。设计过程经过了任务定义,逻辑设计、详细设计、程序编码、程序调试与
测试、结果分析 和撰写实验报告,最终系统地完成整个课程的设计。

该系统是小型管理系统,运行界面为
DOS
界面,始终存在不足,从这次设计

中我深刻的体会
C
设计的意义,我觉得编程除了麻烦也是一件有趣的事情。


1


谭浩强
.C
程序设计[
M
]北京:清华大学出版社,
2005.292

-310

. [2]
苏仕华
. < br>数据结构课程设计[
M

.
上海:机械工业出版社,
2004 . [3]
谭浩强
.C
程序设计题解与上
机指导
[M]
北 京
:
清华大学出版社
,2005.

#include

#include//
提供
malloc()

calloc()

reallo c()

free()

system()

atoi()

atol()

rand()


srand()

exit()/

#include//
字符串调用
typedef int status;

int change = 0; //
信息是否改变
typedef struct student{ int num; //
学号
char name[20]; //
姓名
int mscore; //
数学成绩
int cscore; // c
语言成绩
int escore; //
英语成绩
struct
student *next;//
定义指针
}stu;//
定义对象
stu

void showmenu(){

printf(
printf(
4:showstudent *

while(r != NULL){

if(r->num == k) return r;

r = r->next;

else if(k == 0){ //
按姓名查询

r = s->next;

while(r != NULL){

if(strcmp(r->name,find) == 0) return r;

r = r->next;}

return 0;

status _swap(stu *s1,stu *s2){//
把一个对象的学生数据赋给另一个学生

s1->num = s2->num; //
学号

strcpy(s1->name,s2->name); //
姓名

s1->mscore = s2->mscore; //
数学成绩

s1->cscore = s2->cscore; //c
语言成绩

s1->escore = s2->escore; //
英语成绩

status swap(stu *s1,stu *s2){//
实现两个学生信息的转换

stu *p;

if(!(p = (stu *)malloc(sizeof(stu)))) showerror(0);

_swap(p,s1);

_swap(s1,s2);

_swap(s2,p);

free(p);//
释放
p
所占的空间

status list(stu *s,int k){//
采用选择法排序

stu *p,*p1,*p2;

p1 = s->next;

while(p1){

p2 = p1->next;

while(p2){

if(k == 1)if(p2->num < p1->num)swap(p1,p2); //
学号

if(k == 2)if(p2->mscore > p1->mscore)swap(p1,p2);

if(k == 3)if(p2->cscore > p1->cscore)swap(p1,p2); //c
成绩

if(k == 4)if(p2->escore > p1->escore)swap(p1,p2);

if(k==5)if((p2->mscore+p2->cscore+p2->escore
< br>(p1->mscore+p1->cscore+p1->escore))swap(p1,p2);

p2=p2->next;

p1=p1->next;

status eshow(stu *s){

show(s,0);

while(s->next){

s = s->next;

show(s,2); }}

status addstudent(stu *s){

stu *p,*l;

int k;

while(1){

l = s;

printf(

scanf(

if(k == 0) break;

while(l){

if((l->num) == k){

12 //
英语成绩;
//
总分
>

printf(

show(l,1);

return;

l = l->next;

if(!(p = (stu *)malloc(sizeof(stu)))) showerror(0);

printf(
scanf(

p->next = NULL;

if(s ==NULL) s = p;

else{

while(s->next != NULL) s = s->next;//
将指针置于最末尾
s->next = p;

p = NULL;

change=1;

status editstudent(stu *s){//
修改学生

int k=0;

while(k == 0){

printf(

scanf(

if(k == 0) showid(s);

while(s){

if((s->num) == k){

printf(

student:name,mscore,cscore,esc ore:
scanf(

change=1;

printf(

return;

s = s->next;

庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思


庞大的反义词-bully什么意思



本文更新与2021-01-24 15:52,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/561307.html

C语言学生学习成绩管理系统实验报告的相关文章