1、4设计过程1.算法思想分析根据设计要求,首先定义三个数组,分别存放学号、姓名、成绩.typedef struct stud /学生信息结构 long num; char name20;float score;Stud;然后编写函数,实现添加、查找、删除、排序、退出功能,对数组元素进行操作。2.算法描述与实现添加信息:定义添加信息函数,将输入的信息添加到数组中:void inser(long b) Node *last,*current,*p;current=head;while(current!=NULL&bcurrent-student.num) last=current;current=c
2、urrent-next; 查找学生:void searchname(char *s) /按姓名查找Node *p=head;int flag=0;printf(n学号 姓名 成绩:n);while(p!=NULL) if(strcmp(p-student.name,s)=0) %ld %s %fn,p-student.num,p-student.name,p-student.score);flag=1;p=p-continue;else p=p-if(!flag) printf(没有找到相关信息void find(long b) /按姓名查找b!=p-student.num) p) print
3、f(No foundnelse n学号 姓名 成绩n输出信息:void print() =NULL) 3.系统测试1.菜单 用户运行程序后,显示如下所示菜单,用户根据菜单提示进行操作(如图2.1)。图2.1 2.批量添加用户选择批量添加学生信息功能进行批量添加,可连续添加,按 0 结束添加操作(如图 2.2)。图2.23.按学号查找学生 将学生信息录入之后,若想查找某个学生,用户可选择按学号查找学生信息(图2.3)。图2.34.按姓名查找学生将学生信息录入之后,若想查找某个学生,用户可选择按姓名查找学生信息(图2.4)。图2.45.添加信息用户可以在批量添加后在单个添加学生信息(图2.5)。图
4、2.56.按学号删除学生信息用户可根据情况对已添加的学生信息进行删除,通过学号删除(图2.6)。图2.67.排序输出程序可以将已添加的学生按照成绩的降序排列输出(图2.7).图2.78.退出 操作结束后按 0 退出程序(图2.8)。图2.85设计总结通过一周的课程设计,我从中受益匪浅,使得我对数据结构这门课有了更深一步的认识。在设计过程中,我们发现问题,解决问题,一同探讨问题,在老师的帮助下把问题一一解决。在解决问题的过程中得到了成长,在与同学的合作过程中,我获益良多,提高了自己的团队合作能力和实际动手能力,在亲自动手的同时提升自己,锻炼自己。通过这次设计,我深深的感受到了做系统是一件十分复杂
5、周密的事情,不能有半点的疏忽,需要一个人有周密的思考能力,分析问题、处理问题的能力,还要有足够的耐心。参考文献数据结构程序设计题典 李春葆等编 清华大学出版社数据结构(C语言版) 黄国瑜 叶乃菁编 清华大学出版社数据结构课程设计 苏仕华 等编 机械工业出版社附录:源代码#includestring.hstdlib.htypedef struct node Stud student;struct node *next;Node;Node *head=NULL;void read(void);void inser(long b);void print();void find(long b);voi
6、d searchname(char *s);Node * del(long n);void sort(int flag);void menu();void main() char choose;int flag=1;while (flag) menu(); /调用功能菜单函数,显示菜单项。 请选择功能:choose=getchar();switch(choose) case 1: read(); /调用建立链表的函数;输出链表信息;print();nPress any key Continue getchar();break;2 /调用按学号查找学生信息的函数;并输出查找结果信息;long c
7、;输入要查找的学号:scanf(%ld,&c);find(c);nPress any key Continue.3 /调用按姓名查找学生信息的函数;char s20;输入要查找的姓名:%s,s);searchname(s);n Press any key Continue.4 /调用根据学号删除某个学生信息的函数;并输出删除后的链表信息;Node *h;long n;输入要删除的学生学号:n);h=del(n);if(h=NULL) printf(No find the student nelse print();5 /调用插入新的学生信息的函数;并输出插入后的链表信息;long a;输入新学
8、号:a);inser(a);6 /调用按分数降序排序输出的函数;并输出排序后的链表信息;sort(1);sort(0);0 /结束程序运行flag=0;n * The End! *ndefault: printf(n Wrong Selection !(选择错误,重选)nvoid menu() /综合作业功能菜单 n 学 生 信 息 管 理 系 统n n *菜 单*nn * nn* 1. 批 量 添 加 学 生 信 息 2. 按 学 号 查 找 学 生 信 息 *n* 3. 按 姓 名 查 学 生 信 息 4. 按 学 号 删 除 学 生 信 息 *n* 5. 录 入 新 的 学 生 信 息
9、6. 按 分 数 降 序 排 序 输 出 *n -0. 返 回-n * nvoid read(void) 请输入学号:while(a0) if(current=NULL|bstudent.num=b;%s%fstudent.name,&next=NULL;if(current=head) next=head;head=p;else next=current;last-next=p;else if(b=current-error input a different number:void find(long b) void searchname(char *s) Node * del(long
10、n) Node *p=head,*last;while(p-student.num!=n) last=p;if(p=NULL) return p;else if(p=head) head=p-else last-next=p-return head;void sort(int flag) Node *p1,*p2,*k;float t1;long t2;for(p1=head;p1-p1=p1-next) k=p1;for(p2=p1-p2;p2=p2-if(flag=1&k-student.scorestudent.score|!flag&student.numk=p2;if(k!=p1) t1=p1-student.score;student.score=k-student.score=t1;t2=p1-student.num;student.num=k-student.num=t2;strcpy(s,p1-student.name);strcpy(p1-student.name,k-strcpy(k-student.name,s);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2