空时停止并返回主菜单选择。直接在输出数值时添加mscore+escore+cscore作为总成绩加到信息最后一列。 (4)show函数
为了能让用户输入字符串,依然是定义一个开关,此时的开关条件无最大值,添加信息时直接调用show函数即可实现学生信息的输入。 (5)printf函数
编写显示函数用来输出链表中结点信息, stu型指针r,接着r=*s初值为头指针,用printf方法输出存储学生信息,最while(r!=NULL){??}实现当表中有信息即不为空,就执行while中的内容,打印出学生的各个信息。 (6)delete函数
用来删除记录,先用 if(!s->next) {printf(\no student!\\nplease add at frist!\验证学生信息是否为空,如果为空则输出“please add first”。如果不为空,先选择按学号删除或按姓名删除,然后调用函数stu* Locate(stu *s,char find[],int k)查找要删除的记录。然后用freep()执行记录清空。 (7)insert函数
用来插入学生记录,定义二个指针为p和l,l为前驱,p为插入数据的位置。如果遇到相同学号的则显示输入有重复并显示原来学号的信息。如不然则用scnf和printf输入输出数据,并在运行结束后把指针置尾。 (8)sort函数
根据不同的要求实现成绩从大到小排列,程序中采用的使选择法进行排序,排序过程中调用swap函数实现数据的排列。这样就能按不同要求把数据排列了 。
3.8程序调试与测试(结果分析) 1.函数主界面
6
2.选择第一项实现添加数据如下
3.选择2进行修改编辑
4.选择3进行删除成绩
5.选择4进行排序显示成绩
6.选择5进行查找成绩
7
7.选择6提供载入信息条数
8.选择7保存
9.选择0关闭
要保存选Y不想保存先N。
结果分析
程序运用了结构体,链表,转换和选择法排序实现了删除,添加,信息载入,查询等功能。
(1)单链表查找算法的最好的时间复杂度为o(1),最坏时间复杂度o(n),平均时间复杂度o(n);空间复杂度为o(1)。
(2)单链表插入算法时间复杂度o(n);空间复杂度为o(1)。 (3)系统基本上实现了小型学生管理系统的功能。 4.总结
C语言使上学期教的,现在开始做这个课程设计刚开始有点仿偟,不知道何从下手,最后搬出书本有看了一下,网上查点资料,仔细阅读老师给的任务指导书,开始着手做这个学生成绩管理系统,其原因使该算法简便,程序贴近学生生活,该程序的目的使实现学生成绩的粗略管理。设计过程经过了任务定义,逻辑设计、详细设计、程序编码、程序调试与测试、结果分析和撰写实验报告,最终系统地完成整个课程的设计。
该系统是小型管理系统,运行界面为DOS界面,始终存在不足,从这次设计
8
中我深刻的体会C设计的意义,我觉得编程除了麻烦也是一件有趣的事情。
参考文献
[1] 谭浩强.C程序设计[M]北京:清华大学出版社, 2005.292页-310页. [2] 苏仕华. 数据结构课程设计[M].上海:机械工业出版社,2004. [3] 谭浩强.C程序设计题解与上机指导[M]北京:清华大学出版社,2005.
附录
#include
#include
srand()、exit()/
#include
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(\ *\printf(\ *\printf(\ *\printf(\ *\printf(\ *\printf(\ *\printf(\ *\
9
printf(\ *\printf(\ *\printf(\ *\printf(\
} //给出菜单选择
void show(stu *s,int k){ // 用指向StU对象的指针输出学生信息 switch(k){
case 0:printf(\ mscore cscore escore allscore\\n\
case 1:
printf(\ mscore cscore escore allscore\\n\ printf(\ m m m\\n\
s->cscore,s->escore,(s->mscore+s->cscore+s->escore));
break; default:
printf(\ m m m\\n\
s->cscore,s->escore,(s->mscore+s->cscore+s->escore));
break;
} }
void showid(stu *s){// 显示学生学号对应的姓名
while(s->next){ s = s->next;
printf(\
} }
stu* Locate(stu *s,char find[],int k){ // 该函数用于定位连表中符合要求的接点, 返回该指针 stu *r;
if(strcmp(find,\按学号查询 r = s->next;
10