目 录
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
一、设计目的 ....................................................... 2 二、设计内容 ....................................................... 3 三、设计要求 ....................................................... 4 四、设计过程 ....................................................... 4
1.算法思想分析 ................................................ 4 2.算法描述与实现 .............................................. 5 3.系统测试 .................................................... 7 五、设计总结 ...................................................... 11 参考文献 .......................................................... 12 附录 .............................................................. 13
共 17 页 第 1 页
长 春 大 学 课程设计纸
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
一.设计目的
1.了解并掌握数据结构与算法的设计方法,具备初步的分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
共 17 页 第 2 页
长 春 大 学 课程设计纸
二.设计内容 2.1开发环境
操作系统: Windows 7
开发工具:Microsoft Visual C++ 6.0 开发语言:C++
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
2.2功能简介:
本程序采用C++编写,用于管理学生信息,基本功能有 批量添加学生信息,单个添加学生信息,按学号查找学生,按姓名查找学生,按学号删除学生信息,排序输出全部学生信息以及退出功能。
程序流程:
开始 批量添加 按学号查找 选择功能 按添 姓加 信名查 息 找 结束 按学号删除 排序输出
共 17 页 第 3 页
长 春 大 学 课程设计纸
三.设计要求
1) 程序设计要求:
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
①采用交互工作方式,设计功能菜单;
②建立数据文件,数据包含学生的自然信息和成绩信息(设计几门课以及总成绩);
③对如下关键字:姓名、学号、各科成绩进行排序(冒泡、选择、插入排序等任选一种)。
2) 用二分查找实现如下查询: ①按姓名查询 ②按学号查询
3) 用堆排序找出总成绩排名的前5名学生 4) 输出任一查询结果(可以连续操作)
四.设计过程
1.算法思想分析
根据设计要求,首先定义三个数组,分别存放学号、姓名、成绩.
typedef struct stud //学生信息结构 {
long num; char name[20]; float score; }Stud;
然后编写函数,实现添加、查找、删除、排序、退出
共 17 页 第 4 页
长 春 大 学 课程设计纸
功能,对数组元素进行操作。
2.算法描述与实现
添加信息:
定义添加信息函数,将输入的信息添加到数组中:
void inser(long b) {
Node *last,*current,*p; current=head;
while(current!=NULL&&b>current->student.num){ last=current;
current=current->next; }
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
查找学生:
void searchname(char *s) //按姓名查找 {
Node *p=head; int flag=0;
printf(\"\\n学号 姓名 成绩:\\n\"); while(p!=NULL) {
if(strcmp(p->student.name,s)==0) {
printf(\"%ld %s %f\\n\ore);
flag=1; p=p->next; continue; }
else p=p->next; }
if(!flag) printf(\"没有找到相关信息\"); }
共 17 页 第 5 页
长 春 大 学 课程设计纸
void find(long b) //按姓名查找 {
Node *p=head;
while(p!=NULL&&b!=p->student.num) p=p->next;
if(!p) printf(\"No found\\n\"); else {
printf(\"\\n学号 姓名 成绩\\n\");
printf(\"%ld %s %f\\n\ore); } }
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
输出信息:
void print() {
Node *p=head;
printf(\"\\n学号 姓名 成绩:\\n\"); while(p!=NULL){
printf(\"%ld %s %f\\n\nt.score);
p=p->next; }
printf(\"\\n\"); }
共 17 页 第 6 页
长 春 大 学 课程设计纸
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
3.系统测试
1.菜单
用户运行程序后,显示如下所示菜单,用户根据菜单提示进行操作(如图2.1)。
图2.1
2.批量添加
用户选择批量添加学生信息功能进行批量添加,可连续添加,按 0 结束添加操作(如图 2.2)。
图2.2
共 17 页 第 7 页
长 春 大 学 课程设计纸
3.按学号查找学生
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
将学生信息录入之后,若想查找某个学生,用户可选择按学号查找学生信息(图2.3)。
图2.3
4.按姓名查找学生
将学生信息录入之后,若想查找某个学生,用户可选择按姓名查找学生信息(图2.4)。
图2.4
共 17 页 第 8 页
长 春 大 学 课程设计纸
5.添加信息
用户可以在批量添加后在单个添加学生信息(图2.5)。
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
图2.5
6.按学号删除学生信息
用户可根据情况对已添加的学生信息进行删除,通过学号删除(图2.6)。
图2.6
共 17 页 第 9 页
长 春 大 学 课程设计纸
7.排序输出
程序可以将已添加的学生按照成绩的降序排列输出(图2.7).
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
图2.7
8.退出
操作结束后按 0 退出程序(图2.8)。
图2.8
共 17 页 第 10 页
长 春 大 学 课程设计纸
五.设计总结
通过一周的课程设计,我从中受益匪浅,使得我对数据结构这门课有了更深一步的认识。在设计过程中,我们发现问题,解决问题,一同探讨问题,在老师的帮助下把问题一一解决。在解决问题的过程中得到了成长,在与同学的合作过程中,我获益良多,提高了自己的团队合作能力和实际动手能力,在亲自动手的同时提升自己,锻炼自己。
通过这次设计,我深深的感受到了做系统是一件十分复杂周密的事情,不能有半点的疏忽,需要一个人有周密的思考能力,分析问题、处理问题的能力,还要有足够的耐心。
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
共 17 页 第 11 页
长 春 大 学 课程设计纸
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊
参考文献
《数据结构程序设计题典》 李春葆等编 清华大学出版社 《数据结构(C语言版)》 黄国瑜 叶乃菁编 清华大学出版社 《数据结构课程设计》 苏仕华 等编 机械工业出版社
共 17 页 第 12 页
长 春 大 学 课程设计纸
附录:源代码
#include typedef struct stud //学生信息结构 { long num; char name[20]; float score; }Stud; typedef struct node { Stud student; struct node *next; }Node; Node *head=NULL; void read(void); void inser(long b); void print(); void find(long b); void searchname(char *s); Node * del(long n); void sort(int flag); void menu(); void main() { char choose; int flag=1; while (flag) { menu(); //调用功能菜单函数,显示菜单项。 printf(\" 请选择功能:\"); choose=getchar(); switch(choose) { case '1': read(); //调用建立链表的函数;输出链表信息; print(); printf(\"\\nPress any key Continue \"); getchar(); break; case '2': //调用按学号查找学生信息的函数;并输出查找结果信息; long c; 共 17 页 第 13 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学 课程设计纸 printf(\"输入要查找的学号:\"); scanf(\"%ld\ find(c); printf(\"\\nPress any key Continue.\"); getchar(); break; case '3': //调用按姓名查找学生信息的函数;并输出查找结果信息; char s[20]; printf(\"输入要查找的姓名:\"); scanf(\"%s\ searchname(s); printf(\"\\n Press any key Continue.\"); getchar(); getchar(); break; case '4': //调用根据学号删除某个学生信息的函数;并输出删除后的链表信息; Node *h; long n; printf(\"输入要删除的学生学号:\"); scanf(\"%ld\ h=del(n); if(h==NULL) printf(\"No find the student \\n\"); else print(); printf(\"\\n Press any key Continue.\"); getchar(); getchar(); break; case '5': //调用插入新的学生信息的函数;并输出插入后的链表信息; long a; printf(\"输入新学号:\\n\"); scanf(\"%ld\ inser(a); print(); printf(\"\\n Press any key Continue.\"); getchar(); getchar(); break; case '6': //调用按分数降序排序输出的函数;并输出排序后的链表信息; sort(1); print(); sort(0); printf(\"\\nPress any key Continue.\"); getchar(); getchar(); break; case '0': //结束程序运行 flag=0; printf(\"\\n *** The End! ***\\n\"); break; 共 17 页 第 14 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学 课程设计纸 default: printf(\"\\n Wrong Selection !(选择错误,重选)\\n\"); getchar(); } } } void menu() //综合作业功能菜单 { printf(\" \\n 学 生 信 息 管 理 系 统\\n\"); printf(\" \\n *******************************菜 单**********************************\\n\\n\"); printf(\" ********************************************************************** \\n\\n\"); printf(\"* 1. 批 量 添 加 学 生 信 息 \"); printf(\" 2. 按 学 号 查 找 学 生 信 息 *\\n\"); printf(\"* 3. 按 姓 名 查 学 生 信 息 \"); printf(\" 4. 按 学 号 删 除 学 生 信 息 *\\n\"); printf(\"* 5. 录 入 新 的 学 生 信 息 \"); printf(\" 6. 按 分 数 降 序 排 序 输 出 *\\n\"); printf(\" ----------0. 返 回-----------\\n\"); \\ printf(\" ********************************************************************** \\n\"); } void read(void) { long a; printf(\"请输入学号:\"); scanf(\"%ld\ while(a>0){ inser(a); printf(\"请输入学号:\"); scanf(\"%ld\ } } void inser(long b) { Node *last,*current,*p; current=head; while(current!=NULL&&b>current->student.num){ last=current; current=current->next; } if(current==NULL||b 共 17 页 第 15 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学 课程设计纸 p->student.num=b; scanf(\"%s%f\ p->next=NULL; if(current==head){ p->next=head; head=p; } else{ p->next=current; last->next=p; } } else if(b==current->student.num) printf(\"error input a different number:\"); } void print() { Node *p=head; printf(\"\\n学号 姓名 成绩:\\n\"); while(p!=NULL){ printf(\"%ld %s %f\\n\ p=p->next; } printf(\"\\n\"); } void find(long b) { Node *p=head; while(p!=NULL&&b!=p->student.num) p=p->next; if(!p) printf(\"No found\\n\"); else { printf(\"\\n学号 姓名 成绩\\n\"); printf(\"%ld %s %f\\n\ } } void searchname(char *s) { Node *p=head; int flag=0; printf(\"\\n学号 姓名 成绩:\\n\"); while(p!=NULL) { if(strcmp(p->student.name,s)==0) { printf(\"%ld %s %f\\n\ flag=1; 共 17 页 第 16 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学 课程设计纸 p=p->next; continue; } else p=p->next; } if(!flag) printf(\"没有找到相关信息\"); } Node * del(long n) { Node *p=head,*last; while(p->student.num!=n){ last=p; p=p->next; } if(p==NULL) return p; else if(p==head) head=p->next; else last->next=p->next; return head; } void sort(int flag) { Node *p1,*p2,*k; float t1; long t2; char s[20]; for(p1=head;p1->next;p1=p1->next) { k=p1; for(p2=p1->next;p2;p2=p2->next) if(flag==1&&k->student.score t1=p1->student.score; p1->student.score=k->student.score; k->student.score=t1; t2=p1->student.num; p1->student.num=k->student.num; k->student.num=t2; strcpy(s,p1->student.name); strcpy(p1->student.name,k->student.name); strcpy(k->student.name,s); } } } ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 共 17 页 第 17 页
因篇幅问题不能全部显示,请点此查看更多更全内容