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