当前位置:文档之家› 数据结构课程设计报告(通讯录系统、仓库管理系统、一元多项式的计算、猴子选大王)

数据结构课程设计报告(通讯录系统、仓库管理系统、一元多项式的计算、猴子选大王)

数据结构课程设计报告(通讯录系统、仓库管理系统、一元多项式的计算、猴子选大王)
数据结构课程设计报告(通讯录系统、仓库管理系统、一元多项式的计算、猴子选大王)

《数据结构》

课程设计报告

姓名:

学号:

班级:

设计时间:2010年12月23日(星期四)审阅教师:

目录

第一章设计目的 (3)

第二章设计任务及要求 (3)

一、基本要求: (3)

二、内容: (3)

第三章题目分析与解答 (3)

一、仓库管理系统 (3)

1)题目要求 (3)

2)应用程序功能 (4)

3)主要模块的算法描述 (4)

4)源程序代码 (5)

二、通讯录管理系统 (13)

1)题目要求 (13)

2)应用程序功能 (13)

3)主要算法模块描述 (14)

4)源程序代码 (15)

三、一元多项式计算 (20)

1)题目要求 (20)

2)应用程序功能 (20)

3)主要算法模块描述 (21)

4)源程序代码 (21)

四、猴子选大王 (26)

1)题目要求 (26)

2)应用程序功能 (26)

3)主要算法模块描述 (27)

4)源程序代码 (27)

五、二叉树运算1(**) (29)

1)题目要求 (29)

2)应用程序功能 (29)

3)源程序代码 (29)

4)主要算法模块描述 (29)

第四章设计心得 (29)

第五章参考文献 (30)

第一章设计目的

1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。

2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。

3、培养学生初步的软件设计及软件测试的能力。

第二章设计任务及要求

一、基本要求:

学生必须仔细阅读《数据结构》课程设计指导书,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。

学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。

课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时。

根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。

每个人必须有可运行的程序,学生能对自己的程序面对教师提问并能熟练地解释清楚,学生回答的问题和程序运行的结果作为评分的主要衡量标准;(周二下午开始逐一检查)

二、内容:

本次课程设计完成如下模块(共11个模块,学生可以在其中至少挑选4个功能块完成,但有**号的模块是必须要选择的,多做可以加分)

第三章题目分析与解答

一、仓库管理系统

1)题目要求

设计一个仓库管理系统,可以按照顺序和货物名称查询仓库的存储情况,也可以添

加或删除货物。

struct node

{

int NO; //商品编号

char name[max]; //商品名称

int count; //商品数量

};

2)应用程序功能

明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。

开始运行时界面如下:

你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。

3)主要模块的算法描述

流程图:

4)源程序代码

#include #include #include #include #include #define SIZE 100 typedef struct{

char name[10]; char fam[10]; int pay;

int num;

}Store;

typedef struct node{

Store elem;

struct node *next;

}In;

In *head=NULL;

void appendInfo();

void List();

void menu(void);

In*Init();

void Start();

void Insert();

void Del();

void renew();

void Wsave();

void Read();

void SortUp();

void PreFile();

int main(){

char select;

PreFile();

menu();

while((select=toupper(getch()))!='0'){

system("cls");

switch (select)

{

case '1' :{

Start();system("pause");menu();

break;

}

case '2':{

appendInfo();system("pause");menu(); break;

}

case '3':{

Insert();system("pause");menu();

break;

}

case '4':{

Del();system("pause");menu();

break;

}

case '5':{

renew();system("pause");menu();

break;

}

case '6':{

List();system("pause");menu(); break;

}

case '7':{

SortUp();system("pause");menu(); break;

}

case 'W':{

Wsave();

system("pause");

menu();

break;

}

case 'R':{

Read();

system("pause");

menu();

break;

}

default:printf("Input error!\n");

system("pause");

menu();

break;

}

}

return 0;

}

In*Init(){

In*L;

L=(In*)malloc(sizeof(In));

L->next=NULL;

return L;

}

void appendInfo(){

int i,j;

In*p,*s;

A1:printf("请输入要存放的记录数:");

scanf("%d",&j);

if(j<=0){

printf("Input error!\n");

goto A1;

}

if(head==NULL){

p=Init();

head=p;

}

else{

p=head->next;

while(p->next!=NULL)

p=p->next;

}

for(i=0;i

s=Init();

printf("名称品牌单价数量\n");

scanf("%s",&s->https://www.doczj.com/doc/f12549493.html,);

scanf("%s",&s->elem.fam);

scanf("%d",&s->elem.pay);

scanf("%d",&s->elem.num);

p->next=s;

p=s;

}

}

void List(){

In *p;

if(head==NULL)

{

printf("None of information about products.\n");

return;

}

else

p=head->next;

printf("名称品牌单价数量\n");

while(p!=NULL)

{

printf("%s\t%s\t%d\t%d\n",p->https://www.doczj.com/doc/f12549493.html,,p->elem.fam,p->elem.pay,p->elem.num); p=p->next;

}

}

void menu(){

system("cls");

printf(" |-------------------------------------------|\n");

printf(" |---------------家电仓库管理----------------|\n");

printf(" | 请输入选项编号 |\n");

printf(" |-------------------------------------------|\n");

printf(" | 1--数据初始化 |\n");

printf(" | 2--创建数据表 |\n"); printf(" | 3--数据插入 |\n"); printf(" | 4--数据删除 |\n"); printf(" | 5--数据更新 |\n"); printf(" | 6--数据查询 |\n"); printf(" | 7--单价升序 |\n"); printf(" | w--数据保存 |\n"); printf(" | r--数据读出 |\n"); printf(" | 0--系统退出 (exit) |\n"); printf(" |-------------------------------------------|\n"); printf("请输入你的选择:");

}

void Start(){

char com;

printf("你想清空所有资料吗?(Y/N):");

fflush(stdin);

com=getchar();

if(com=='Y'||com=='y'){

printf("已经初始化了、、、\n");

head=NULL;

return;

}

else printf("资料仍在、、、\n");

return ;

}

void Insert(){

In*pi,*p;

char str[10];

printf("请问要在哪个学生后面插入(输入姓名):");

fflush(stdin);

gets(str);

pi=Init();

printf("名称品牌单价数量\n");

scanf("%s",&pi->https://www.doczj.com/doc/f12549493.html,);

scanf("%s",&pi->elem.fam);

scanf("%d",&pi->elem.pay);

scanf("%d",&pi->elem.num);

if(head==NULL){

printf("前面没有数据,默认接在表头。\n");

p=Init();

head=p;

p->next=pi;

}

else{

p=head->next;

while((strcmp(p->https://www.doczj.com/doc/f12549493.html,,str)!=0)&&p->next!=NULL)

p=p->next;

if(p->next!=NULL){

pi->next=p->next;

p->next=pi;

}

else p->next=pi;

}

}

void Del(){

In*pi,*p,*s;

char str[10];

if(head==NULL){

printf("没有商品资料。\n");

return;

}

printf("请输入要删除产品的名称:");

fflush(stdin);

gets(str);

p=head->next;

while((strcmp(p->https://www.doczj.com/doc/f12549493.html,,str)!=0)&&p->next!=NULL){

pi=p;

p=p->next;

}

if(strcmp(p->https://www.doczj.com/doc/f12549493.html,,str)==0){

printf("所删除的记录为:\n");

printf("%s\t%s\t%d\t%d\n",p->https://www.doczj.com/doc/f12549493.html,,p->elem.fam,p->elem.pay,p->elem.num); if(p==head->next){

s=Init();

head=s;

s->next=p->next;

}

else

pi->next=p->next;

free(p);

}

else printf("找不到相应的商品资料。\n");

}

void renew(){

In*pi,*p,*s;

char str[10];

if(head==NULL){

printf("没有商品资料。\n");

return;

}

List();

printf("请输入要更新产品的名称:");

fflush(stdin);

gets(str);

p=head->next;

while((strcmp(p->https://www.doczj.com/doc/f12549493.html,,str)!=0)&&p->next!=NULL){

pi=p;

p=p->next;

}

if(strcmp(p->https://www.doczj.com/doc/f12549493.html,,str)==0){

printf("所要更新的记录为:\n");

printf("%s\t%s\t%d\t%d\n",p->https://www.doczj.com/doc/f12549493.html,,p->elem.fam,p->elem.pay,p->elem.num); printf("品牌单价数量\n");

scanf("%s",&p->elem.fam);

scanf("%d",&p->elem.pay);

scanf("%d",&p->elem.num);

printf("更新后的记录为:\n");

printf("%s\t%s\t%d\t%d\n",p->https://www.doczj.com/doc/f12549493.html,,p->elem.fam,p->elem.pay,p->elem.num); }

else printf("找不到相应的商品资料。\n");

}

void Wsave(){

FILE*fp;

In*p;

if(head==NULL){

printf("你还未有资料。");

return;

}

if((fp=fopen("store.dat","wb"))==NULL)

printf("Cannot open file!\n");

else{

for(p=head->next;p!=NULL;p=p->next)

if(fwrite(p,sizeof(In),1,fp)!=1)

printf("File write error!\n");

}

printf("\t\t\t保存成功。\n\n");

fclose(fp);

}

void Read(){

In*p;

FILE*fp;

if(head==NULL){

printf("你还未有资料。");

return;

}

if((fp=fopen("store.dat","rb"))==NULL){

printf("Cannot Open.");

return;

}

for(p=head->next;p!=NULL;p=p->next){

p=Init();

fread(p,sizeof(In),1,fp);

printf("%s\t%s\t%d\t%d\n",p->https://www.doczj.com/doc/f12549493.html,,p->elem.fam,p->elem.pay,p->elem.num); }

printf("\n\t\t\t读取成功\n");

fclose(fp);

}

void SortUp(){

In*p1,*p2,*p3;

p3=(In*)malloc(sizeof(In));

if(head==NULL){

printf("没有记录,无法排序。");

return;

}

for(p1=head->next;p1->next!=NULL;p1=p1->next)

for(p2=p1->next;p2!=NULL;p2=p2->next)

if(p1->elem.pay>p2->elem.pay){

p3->elem=p1->elem;

p1->elem=p2->elem;

p2->elem=p3->elem;

}

printf("\n已经排序好了。\n");

List();

}

void PreFile(){

int Flag=0;

In *he,*p,*q;

FILE *fp;

if((fp=fopen("store.dat","ab+"))==NULL){

printf("Open file error!\n");

exit(0);

}

he=Init();

q=he;

p=Init();

he->next=p;

for(;fread(p,sizeof(In),1,fp)!=0;p=Init()){

he->next=p;

he=p;

p->next=NULL;

Flag=1;

}

if(Flag)

head=q;

else head=NULL ;

fclose(fp);

}

二、通讯录管理系统

1)题目要求

通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。

struct node

{

char num[5]; //编号

char name[8]; //姓名

char sex; //性别

char tel[8]; //电话

char address[100]; //地址

};

2)应用程序功能

明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。

开始运行时界面如下:

输入通讯录信息后,界面如下:

你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。

3)主要算法模块描述

4)源程序代码

#include

#include

#include

typedef struct{

char num[6];

char name[10];

char sex[5];

char tel[13];

char address[30];

}datatype;

typedef struct node{

datatype data;

struct node * next;

}listnode;

typedef listnode * linklist;

listnode *p;

int menu_select();

linklist createlist(void);

void insertnode(linklist head,listnode *p);

listnode *listfind(linklist head);

void delnode(linklist head);

void printlist(linklist head);

void main()

{

linklist head;

int m,flag;

printf(" \n");

printf(" \n");

printf(" \n");

printf(" 通讯录管理系统 \n");

printf(" ************** 通讯录信息的建立 ***************\n");

head=createlist();

while(flag!=1)

{

m=menu_select();

switch(m)

{

case 1:

printf(" ************** 通讯录信息添加*****************\n");

printf(" ** 编号(4) 姓名(8) 性别(5) 电话(11) 地址

(30)**\n");

printf("

***********************************************\n");

p=(listnode *)malloc(sizeof(listnode));

scanf("%s%s%s%s%s",p->data.num,p->https://www.doczj.com/doc/f12549493.html,,p->data.sex,p->data.tel,p->data .address);

insertnode(head,p);

break;

case 2:

printf("******************************\n");

printf("******* 通讯录信息查询 *******\n");

printf("******************************\n");

p=listfind(head);

if(p!=NULL)

{

printf(" ** 编号姓名单位电话地址**\n");

printf(" ------------------------------\n");

printf("%s,%s,%s,%s,%s\n",p->data.num,p->https://www.doczj.com/doc/f12549493.html,,p->data.sex,p->data.tel, p->data.address);

printf(" ------------------------------\n");

}

else

printf("没有你要找的人 ! \n");

break;

case 3:

printf(" ***********************************\n");

printf(" **********通讯信息的删除***********\n");

printf(" ***********************************\n");

delnode(head);

break;

case 4:

printf(" ***********************************\n");

printf(" **********通讯录链表的输出*********\n");

printf(" ***********************************\n");

printlist(head);

break;

case 5:

flag=1;

printf("\t 谢谢您的使用! \n");

}

}

}

linklist createlist(void)

{

linklist head=(listnode *)malloc(sizeof(listnode));

listnode *p,*rear;

int n;

rear=head;

printf("初始化输入通讯录数:");

scanf("%d",&n);

printf(" 编号(5) 姓名(8) 性别(5) 电话(11) 地址(100) \n");

printf(" --------------------------------------------\n");

for(int i=0;i

{

p=(listnode *)malloc(sizeof(listnode));

scanf("%s%s%s%s%s",p->data.num,p->https://www.doczj.com/doc/f12549493.html,,p->data.sex,p->data.tel,p->data .address);

rear->next=p;

rear=p;

}

printf("创建成功!\n");

rear->next=NULL;

return head;

}

void insertnode(linklist head,listnode *p)

{

listnode *p1,*p2;

p1=head;

p2=p1->next;

while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)

{

p1=p2;

p2=p2->next;

}

p1->next=p;

p->next=p2;

printf("插入成功!\n");

}

listnode * listfind(linklist head)

{

listnode * p;

char num[6];

char name[10];

int xz;

printf("--------------------\n");

printf(" 1.编号查询\n");

printf(" 2.姓名查询\n");

printf("--------------------\n");

printf("请选择: ");

p=head->next;

scanf("%d",&xz);

if (xz==1){

printf(" 请输入要查找的编号: ");

scanf("%s",num);

while(p && strcmp(p->data.num,num)<0)

p=p->next;

if (p==NULL || strcmp(p->data.num,num)>0) p=NULL;

}

else

if(xz=2){

printf("请输入要查询者的姓名: ");

scanf("%s",name);

while(p && strcmp(p->https://www.doczj.com/doc/f12549493.html,,name)!=0) p=p->next;

}

return p;

}

void delnode(linklist head)

{

int jx;

listnode *p,*q;

p=listfind(head);

if(p==NULL){

printf("没有要删除的通讯者!:\n");

return;

}

printf ("真的要删除该结点吗?(1.是/0.不):"); scanf("%d",&jx);

if (jx==1){

q=head;

while(q!=NULL && q->next!=p)

q=q->next;

q->next=p->next;

free(p);

printf("通讯者已被删除!\n");

}

}

void printlist(linklist head)

{

listnode * p;

p=head->next;

printf(" 编号姓名性别电话地址\n");

printf(" -----------------------------\n");

while(p!=NULL)

{

printf(" %s, %s, %s, %s, %s\n",p->data.num,p->https://www.doczj.com/doc/f12549493.html,,p->data.s ex,p->data.tel,p->data.address);

printf(" ------------------------------\n");

p=p->next;

}

}

int menu_select()

{

for( ; ; ){

int sn;

printf(" \n");

printf(" ======================\n");

printf(" 1.通讯者的插入\n");

printf(" 2.通讯录的查询\n");

printf(" 3.通讯者的删除\n");

printf(" 4.通讯录的输出\n");

printf(" 5.退出通管理系统\n");

printf(" ======================\n");

printf(" 请选择操作1-5 \n");

printf(" 输入你选择的数字: ");

scanf("%d",&sn);

if(sn<0||sn>5)

printf("\t 输入错误\n");

return sn;

}

}

三、一元多项式计算

1)题目要求

任务:能够按照指数降序排列建立并输出多项式;

能够完成两个多项式的相加、相减,并将结果输入;

在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

2)应用程序功能

明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。

开始运行时界面如下:

而后对第二个多项式进行输入:

输入多项式a和b后,可看到有界面如下:

你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。

相关主题
文本预览
相关文档 最新文档