宝玛科技网
您的当前位置:首页数据结构学籍管理系统

数据结构学籍管理系统

来源:宝玛科技网
长 春 大 学 课程设计纸

目 录

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

一、设计目的 ....................................................... 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 #include #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||bstudent.num){ printf(\"请输入姓名、分数:\"); p=(Node *)malloc(sizeof(Node));

共 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.scorestudent.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); } } }

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

共 17 页 第 17 页

因篇幅问题不能全部显示,请点此查看更多更全内容