合肥学院
计算机科学与技术系
课程设计报告
2014 ~ 2015 学年第二学期
课
程
数据结构与算法
课程设计名称
超市货架管理 学生姓名 许世琨 学
号
1304031035 专业班级 13网络工程一班 指导教师
何立新、华珊珊
2015 年 6 月
目录
一:问题分析和任务定义 . ................................................. 2
Ⅰ、问题描述与分析 . ................................................. 2 Ⅱ、任务定义 . ....................................................... 2 二:功能模块图 . ......................................................... 2 三:详细设计和编码 . ..................................................... 4 四:上机调试过程 . ....................................................... 6 五:测试结果及其分析 . ................................................... 7 六:用户使用说明 . ....................................................... 9 七:参考文献 . ........................................................... 9 八:附录 . ................................................................ 9
一:问题分析和任务定义
Ⅰ、问题描述与分析
[问题描述]
商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。
[问题分析]
基本思路是先建立两个栈!在一个栈里放入已有的商品!然后用一个循环语句对新加入的商品进行个数的确定输入!然后把第一个栈里的元素出栈与新加入的进行比较新的比旧的大就把旧的放到第二个栈里,小的话就把新的入栈1, 完成后把栈2的入栈1。完成输出。
Ⅱ、任务定义
1、先定义数据日期的结构体--里面包括日期。 2、写进栈和出栈的函数。 3、写倒货函数。
4、函数输出,输出只是单纯的输出,不是求出栈。
二:功能模块图
1.各个模块的功能描述。
struct data:定义商品信息
包括商品名和生产日期
Seqstack :定义顺序栈
putin(seqstack *s1):输入货架原始商品数据
存放在顺序栈A 中
cmp(seqstack *s1, seqstack *s2, int TOP):输入并比较新商品,以调整其在货架中的
位置
借助顺序栈B 在栈A 上操作
putout(seqstack *s1,int TOP):输出顺序栈
2.功能模块图
三:详细设计和编码
定义商品信息模块: struct data {
char name[10]; long date; };
定义顺序栈模块: typedef struct {
struct data sp[size]; int top; }seqstack;
输入原始数据模块: int putin(seqstack *s1) {
int i = 0;
for(s1->top = 0; s1->top top ++) { 要求摆放
printf("请输入第%d件商品名称:",s1->top + 1); scanf("%s", s1->sp[s1->top].name); printf("请输入生产日期:");
scanf("%d", &s1->sp[s1->top].date); printf("\n"); }
/*商品名称*/
/*商品生产日期*/
//此处输入商品生产时间应按照由近到远输入,以确保货架上原始商品已经按
return(-- s1->top); }
处理新商品模块:
int cmp(seqstack *s1, seqstack *s2, int TOP) {
struct data new; s1->top = TOP; s2->top = -1;
printf("请输入新商品名称:"); scanf("%s", new.name); printf("请输入生产日期:"); scanf("%d", &new.date); /*比较新旧商品的生产日期*/
while(s1->top != -1 && new.date - s1->sp[s1->top].date > 0) {
s2-> top ++;
strcpy(s2->sp[s2->top].name, s1->sp[s1->top].name); s2->sp[s2->top].date = s1->sp[s1->top].date; s1->top--; }
s1->top++;
/*将新商品插入货架*/
strcpy(s1->sp[s1->top].name, new.name); s1->sp[s1->top].date = new.date; for(;s2->top>-1;s2->top--) {
s1->top++;
strcpy(s1->sp[s1->top].name,s2->sp[s2->top].name); s1->sp[s1->top].date=s2->sp[s2->top].date; }
return(s1->top); }
顺序栈输出模块:
void putout(seqstack *s1,int TOP) {
printf("\n\n更新商品后的货架商品顺序为:\n"); printf("\n商品名称 生产日期:\n\n"); for(s1->top=TOP;s1->top>=0;s1->top--) {
printf(" %s ",s1->sp[s1->top].name); printf("%d\n",s1->sp[s1->top].date); }
printf("\n\n\n\n"); }
四:上机调试过程
1. 这个程序代码比较少,也比较简单,所以刚开始错误大多是大小写问题,输入格式问题,标点符号问题,括号匹配问题等,简单的检查即可解决。
2. 很多不懂的还是请教别的同学的,老是也给于了很多的帮助!
3. 输入时会出现格式错误(如下)
图3-1
五:测试结果及其分析
1. 你可以定义你要输入的货架上的商品个数,名称你也可以随意的取,生产日期自己定义
图4-1(输入已有商品)
图4-2(输入新的商品)
图4-3(结果输出)
六:用户使用说明
1.输入已有的商品个数 2.输入已有商品的名字、日期 3.输入新加入的商品个数 4.输入新加入的商品名字、日期 5.输出结果
七:参考文献
[1] 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。 [2] 《数据结构算法与应用——C 语言描述》第一版,Sartaj Sahni 著,国防科技大学汪诗林、孙晓东等译,王广芳审校,机械工业出版社。
[3]《算法设计方法》,吴哲辉、崔焕庆、马炳先、吴振寰著,机械工业出版社,2008。
[4] 《数据结构与算法分析——C 语言描述》(Data Structures and Algorithms Analysis in C)第二版,Mark Allen Weiss著,天津师范大学冯舜玺译,机械工业出版社。
[5] 《数据结构(C 语言版)》,严蔚敏、吴伟民著,清华大学出版社。
[6] 《C++数据结构原理与经典问题求解》,左飞著,飞思科技产品研发中心监制,电子工业出版社,2008。
[7]《C 陷阱与缺陷》作者 : 凯尼格 出版社 : 人民邮电出版社。
[8]《编程精粹》 作者 : Steve Maguire 出版社 : 人民邮电出版社。
八:附录
#include
#include
#define size 20
struct data//定义商品信息
char name[6]; //商品名称
long int date; //商品生产日期
};
typedef struct//定义顺序栈
{
struct data sp[size];
int top;
}seqstack;
int push1(seqstack *s1)
{
int i=0,n;
// 先输入n 件
puts("输入已有商品的件数:");
scanf(" %d", &n);
for(s1->top=0;s1->toptop++)
{
printf("请输入第%d件商品名称:",s1->top+1);
scanf("%s",s1->sp[s1->top].name);
printf("请输入生产日期:");
scanf("%d",&s1->sp[s1->top].date);
printf("\n");
}
return(--s1->top);
}
int cmp(seqstack *s1,seqstack *s2,int TOP)
{
int n,i;
struct data new;
s1->top=TOP;
s2->top=-1;
puts("输入新商品的个数:");
scanf(" %d", &n);
// 循环
for(i=0;i
printf("请输入新商品名称:");
scanf("%s",new.name);
printf("请输入生产日期:");
scanf("%d",&new.date);
while(s1->top!=-1&&new.date-s1->sp[s1->top].date>0)
//比较新旧商品的生产日期
{
s2->top++;
strcpy(s2->sp[s2->top].name,s1->sp[s1->top].name);
s2->sp[s2->top].date=s1->sp[s1->top].date;
s1->top--;
}
s1->top++;//将新商品插入货架
strcpy(s1->sp[s1->top].name,new.name);
s1->sp[s1->top].date=new.date;
for(;s2->top>-1;s2->top--)
{
s1->top++;
strcpy(s1->sp[s1->top].name,s2->sp[s2->top].name);
s1->sp[s1->top].date=s2->sp[s2->top].date;
}
}
return(s1->top);
}
void pop(seqstack *s1,int TOP)//输出插入新商品后的货架商品顺序
{
printf("更新商品后的货架商品顺序为:\n");
printf("商品名称 生产日期:\n");
for(s1->top=TOP;s1->top>=0;s1->top--)
{
printf(" %s ",s1->sp[s1->top].name);
printf("%d\n",s1->sp[s1->top].date);
}
printf("over");
}
void main()
{
int TOP=0;
seqstack A,B;
TOP=push1(&A);
TOP=cmp(&A,&B,TOP);
pop(&A,TOP); }
合肥学院
计算机科学与技术系
课程设计报告
2014 ~ 2015 学年第二学期
课
程
数据结构与算法
课程设计名称
超市货架管理 学生姓名 许世琨 学
号
1304031035 专业班级 13网络工程一班 指导教师
何立新、华珊珊
2015 年 6 月
目录
一:问题分析和任务定义 . ................................................. 2
Ⅰ、问题描述与分析 . ................................................. 2 Ⅱ、任务定义 . ....................................................... 2 二:功能模块图 . ......................................................... 2 三:详细设计和编码 . ..................................................... 4 四:上机调试过程 . ....................................................... 6 五:测试结果及其分析 . ................................................... 7 六:用户使用说明 . ....................................................... 9 七:参考文献 . ........................................................... 9 八:附录 . ................................................................ 9
一:问题分析和任务定义
Ⅰ、问题描述与分析
[问题描述]
商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。
[问题分析]
基本思路是先建立两个栈!在一个栈里放入已有的商品!然后用一个循环语句对新加入的商品进行个数的确定输入!然后把第一个栈里的元素出栈与新加入的进行比较新的比旧的大就把旧的放到第二个栈里,小的话就把新的入栈1, 完成后把栈2的入栈1。完成输出。
Ⅱ、任务定义
1、先定义数据日期的结构体--里面包括日期。 2、写进栈和出栈的函数。 3、写倒货函数。
4、函数输出,输出只是单纯的输出,不是求出栈。
二:功能模块图
1.各个模块的功能描述。
struct data:定义商品信息
包括商品名和生产日期
Seqstack :定义顺序栈
putin(seqstack *s1):输入货架原始商品数据
存放在顺序栈A 中
cmp(seqstack *s1, seqstack *s2, int TOP):输入并比较新商品,以调整其在货架中的
位置
借助顺序栈B 在栈A 上操作
putout(seqstack *s1,int TOP):输出顺序栈
2.功能模块图
三:详细设计和编码
定义商品信息模块: struct data {
char name[10]; long date; };
定义顺序栈模块: typedef struct {
struct data sp[size]; int top; }seqstack;
输入原始数据模块: int putin(seqstack *s1) {
int i = 0;
for(s1->top = 0; s1->top top ++) { 要求摆放
printf("请输入第%d件商品名称:",s1->top + 1); scanf("%s", s1->sp[s1->top].name); printf("请输入生产日期:");
scanf("%d", &s1->sp[s1->top].date); printf("\n"); }
/*商品名称*/
/*商品生产日期*/
//此处输入商品生产时间应按照由近到远输入,以确保货架上原始商品已经按
return(-- s1->top); }
处理新商品模块:
int cmp(seqstack *s1, seqstack *s2, int TOP) {
struct data new; s1->top = TOP; s2->top = -1;
printf("请输入新商品名称:"); scanf("%s", new.name); printf("请输入生产日期:"); scanf("%d", &new.date); /*比较新旧商品的生产日期*/
while(s1->top != -1 && new.date - s1->sp[s1->top].date > 0) {
s2-> top ++;
strcpy(s2->sp[s2->top].name, s1->sp[s1->top].name); s2->sp[s2->top].date = s1->sp[s1->top].date; s1->top--; }
s1->top++;
/*将新商品插入货架*/
strcpy(s1->sp[s1->top].name, new.name); s1->sp[s1->top].date = new.date; for(;s2->top>-1;s2->top--) {
s1->top++;
strcpy(s1->sp[s1->top].name,s2->sp[s2->top].name); s1->sp[s1->top].date=s2->sp[s2->top].date; }
return(s1->top); }
顺序栈输出模块:
void putout(seqstack *s1,int TOP) {
printf("\n\n更新商品后的货架商品顺序为:\n"); printf("\n商品名称 生产日期:\n\n"); for(s1->top=TOP;s1->top>=0;s1->top--) {
printf(" %s ",s1->sp[s1->top].name); printf("%d\n",s1->sp[s1->top].date); }
printf("\n\n\n\n"); }
四:上机调试过程
1. 这个程序代码比较少,也比较简单,所以刚开始错误大多是大小写问题,输入格式问题,标点符号问题,括号匹配问题等,简单的检查即可解决。
2. 很多不懂的还是请教别的同学的,老是也给于了很多的帮助!
3. 输入时会出现格式错误(如下)
图3-1
五:测试结果及其分析
1. 你可以定义你要输入的货架上的商品个数,名称你也可以随意的取,生产日期自己定义
图4-1(输入已有商品)
图4-2(输入新的商品)
图4-3(结果输出)
六:用户使用说明
1.输入已有的商品个数 2.输入已有商品的名字、日期 3.输入新加入的商品个数 4.输入新加入的商品名字、日期 5.输出结果
七:参考文献
[1] 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。 [2] 《数据结构算法与应用——C 语言描述》第一版,Sartaj Sahni 著,国防科技大学汪诗林、孙晓东等译,王广芳审校,机械工业出版社。
[3]《算法设计方法》,吴哲辉、崔焕庆、马炳先、吴振寰著,机械工业出版社,2008。
[4] 《数据结构与算法分析——C 语言描述》(Data Structures and Algorithms Analysis in C)第二版,Mark Allen Weiss著,天津师范大学冯舜玺译,机械工业出版社。
[5] 《数据结构(C 语言版)》,严蔚敏、吴伟民著,清华大学出版社。
[6] 《C++数据结构原理与经典问题求解》,左飞著,飞思科技产品研发中心监制,电子工业出版社,2008。
[7]《C 陷阱与缺陷》作者 : 凯尼格 出版社 : 人民邮电出版社。
[8]《编程精粹》 作者 : Steve Maguire 出版社 : 人民邮电出版社。
八:附录
#include
#include
#define size 20
struct data//定义商品信息
char name[6]; //商品名称
long int date; //商品生产日期
};
typedef struct//定义顺序栈
{
struct data sp[size];
int top;
}seqstack;
int push1(seqstack *s1)
{
int i=0,n;
// 先输入n 件
puts("输入已有商品的件数:");
scanf(" %d", &n);
for(s1->top=0;s1->toptop++)
{
printf("请输入第%d件商品名称:",s1->top+1);
scanf("%s",s1->sp[s1->top].name);
printf("请输入生产日期:");
scanf("%d",&s1->sp[s1->top].date);
printf("\n");
}
return(--s1->top);
}
int cmp(seqstack *s1,seqstack *s2,int TOP)
{
int n,i;
struct data new;
s1->top=TOP;
s2->top=-1;
puts("输入新商品的个数:");
scanf(" %d", &n);
// 循环
for(i=0;i
printf("请输入新商品名称:");
scanf("%s",new.name);
printf("请输入生产日期:");
scanf("%d",&new.date);
while(s1->top!=-1&&new.date-s1->sp[s1->top].date>0)
//比较新旧商品的生产日期
{
s2->top++;
strcpy(s2->sp[s2->top].name,s1->sp[s1->top].name);
s2->sp[s2->top].date=s1->sp[s1->top].date;
s1->top--;
}
s1->top++;//将新商品插入货架
strcpy(s1->sp[s1->top].name,new.name);
s1->sp[s1->top].date=new.date;
for(;s2->top>-1;s2->top--)
{
s1->top++;
strcpy(s1->sp[s1->top].name,s2->sp[s2->top].name);
s1->sp[s1->top].date=s2->sp[s2->top].date;
}
}
return(s1->top);
}
void pop(seqstack *s1,int TOP)//输出插入新商品后的货架商品顺序
{
printf("更新商品后的货架商品顺序为:\n");
printf("商品名称 生产日期:\n");
for(s1->top=TOP;s1->top>=0;s1->top--)
{
printf(" %s ",s1->sp[s1->top].name);
printf("%d\n",s1->sp[s1->top].date);
}
printf("over");
}
void main()
{
int TOP=0;
seqstack A,B;
TOP=push1(&A);
TOP=cmp(&A,&B,TOP);
pop(&A,TOP); }