您的当前位置:首页正文

课程设计报告 作者 张雷

2020-03-16 来源:客趣旅游网


语言及程序设计 课程设计报告

班级:软件 81501 学号:********* 姓名:张 *

2016年1月

1

C

一、题目内容描述

输入超市10种菜的价格信息,每个信息含有成员名为“编号、菜名、卖菜人、单价、数量、优惠折扣、金额(由计算得到)、金额排名”,分别编写六个函数求:

(1)输入一个卖菜人,查询所有该卖菜人的信息并输出,若不存在显示没找到。 (2)输入一个新菜名的信息,按编号顺序将该信息插入后输出。 (3)输入一个已存在菜名信息,删除该菜名的信息后输出。 (4)求每种菜的金额=单价*数量*(1-优惠折扣); (5)求所有菜的总数量和总金额并输出;

(6)对所有菜按金额进行降序排序并输出其信息。 要求:

10种菜的数据用文件存储,每种菜信息的结构体用数组和单链表,首先建立一个具有10种菜数据的单链表或数组,并在程序执行后先显示“菜单”,当输入为1时,执行第(1)个函数;当输入为2时,执行第(2)个函数;当输入为3时,执行第(3)个函数;当输入为4时,执行第(4)个函数;当输入为5时,执行第(5)个函数;当输入为6时,执行第(6)个函数;当输入为7时,退出系统,当输入其他数字时,提示输入有错误。

二、应用程序功能的详细说明

输入数字 1 查询卖菜人信息 输入数字 2 输入一个新菜名的信息,按编号顺序将该信息插入后输出 输入数字 3 输入一个已存在菜名信息,删除该菜名的信息后输出 输入数字 4 每种菜的总金额

输入数字 5 所有菜的总数量和总金额

输入数字 6 所有菜按金额进行降序排序并输出其信息 输入数字 7 退出程序 输入其他数字 提示输入错误 三、输入数据类型、格式和内容

数据类型:

int num;

char vge_name[8]; char name[10]; float price; int mount; float discount; float money; int race;

四、 主要模块的算法描述

主函数:

2

(一)查找工人信息

3

(二)添加蔬菜信息

(三)删除蔬菜信息

4

(四)计算每一种菜的总价

5

(五)输出所有菜的数量及价格总和

6

(六)降序输出蔬菜信息

7

(七)退出程序

(八)输入错误

五、程序的源代码清单

数组法:

#include #include #include #include

#define LEN sizeof(struct vegetable)

struct vegetable { int num;

char vge_name[8]; char name[10]; float price; int mount; float discount; float money; int race; }x[15];

void print1() {printf(\"

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

void print() //从文件输入 {int i;

FILE*f1;

8

f1=fopen(\"D:\\\\xy.txt\ for(i=0;i<10;i++)

fscanf(f1,\"%d%s%s%f%d%f\discount);

}

void sort1() //排序 { int i,j;

struct vegetable b; for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(x[i].numfloat *add() //一种菜的总价 {struct vegetable a[10]; int i;

printf(\"┌─────────┐\\n\"); printf(\"│ 菜名 │ 总金额 │\\n\"); for(i=0;i<10;i++)

{printf(\"├────┼────┤\\n\");

{a[i].money=(x[i].price)*(x[i].mount)*(x[i].discount);

printf(\"│%-6s │%-8.2f│\\n\ printf(\"└─────────┘\\n\"); }

float add1() //所有菜的总数量和总金额 {

int i,j,b=0; float c=0;

for(j=0;j<10;j++)

c=c+(x[j].price)*(x[j].mount)*(x[j].discount); for(i=0;i<10;i++) b=b+x[i].mount;

printf(\"┌───┬────┐\\n\"); printf(\"│总数量│ 总金额 │\\n\"); printf(\"├───┼────┤\\n\"); printf(\"│%4d │%6.2f │\\n\

9

printf(\"└───┴────┘\\n\"); }

void sort() //排序法 { int i,j;

struct vegetable b; for(i=0;i<10;i++)

x[i].money=(x[i].price)*(x[i].mount)*(x[i].discount); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(x[i].moneyprintf(\"┌───┬────┬───┬──┬──┬──┬───┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│ 总额 │\\n\"); for(i=0;i<10;i++)

{printf(\"├───┼────┼───┼──┼──┼──┼───┤ \\n\");

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│%6.2f│\\n\

printf(\"└───┴────┴───┴──┴──┴──┴───┘\\n\"); }

void insert() //插入函数 {int i,j;

struct vegetable t,b; FILE*f2;

f2=fopen(\"D:\\\\xy1.txt\sort1();

printf(\"输入新信息后自动排序输出\\n\");

printf(\"必须按照以下格式输入 且每个信息之间用空格隔开: \\n\"); printf(\"编号 菜名 姓名 单价 数量 折扣\\n\"); printf(\"15008 大米 黄晓明 5 56 0.8\\n\"); printf(\"\\n\");

scanf(\"%d%s%s%f%d%f\x[10]=t;

for(j=0;j<10;j++)

for(i=0;i<10-j;i++) if(x[i].numfprintf(f2,\"┌───┬────┬───┬──┬──┬──┐\\n\");

10

fprintf(f2,\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); for(i=0;i<11;i++)

{fprintf(f2,\"├───┼────┼───┼──┼──┼──┤ \\n\");

fprintf(f2,\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│\\n\

fprintf(f2,\"└───┴────┴───┴──┴──┴──┘\\n\"); printf(\"\\n\");

printf(\"请进入D盘中的xy1文件查看\\n\"); fclose(f2); }

void data() //查询卖菜人信息函数 {

int i=0; char a[10]; scanf(\"%s\

for(i=0;i<10;i++)if(i==10) printf(\"\\n输入有误\\n\"); else if(strcmp(x[i].name,a)==0) {printf(\"结果如下:\\n\");

printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); printf(\"├───┼────┼───┼──┼──┼──┤ \\n\");

printf(\"│%6.3d│ %s │%-6s│%3.2f│%3d \\n\

printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); break; } }

void dele() //删除菜信息函数 {

int i,j; char a[10];

printf(\"请输入一种菜名来删除\\n\"); scanf(\"%s\ for(i=0;i<10;i++)

{if(strcmp(x[i].vge_name,a)==0) for(j=i;j<10;j++) x[j]=x[j+1]; }

printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\");

%3.2f│11

for(i=0;i<9;i++)

{printf(\"├───┼────┼───┼──┼──┼──┤ \\n\");

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│\\n\

printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); }

main() {

int i,c; print1();

printf(\" ** 1.查询卖菜人信息 **\\n\");

printf(\" ** 2.输入一个新菜名的信息,按编号顺序将该信息插入后输出 **\\n\");

printf(\" ** 3.输入一个已存在菜名信息,删除该菜名的信息后输出 **\\n\");

printf(\" ** 4.每种菜的总金额 **\\n\");

printf(\" ** 5.所有菜的总数量和总金额 **\\n\");

printf(\" ** 6.所有菜按金额进行降序排序并输出其信息 **\\n\");

printf(\" ** 7.退出程序 **\\n\");

print1(); print();

printf(\" \\n 请输入需要执行的序号:\\n\"); scanf(\"%d\ switch(c)

{case 1:data();break; case 2:insert();break; case 3:dele();break; case 4:add();break; case 5:add1();break; case 6:sort();break; case 7:break;

default: printf(\"\\n 输入有误!!\\n\\n\"); } }

链表法:

#include

12

#include #include #include

#define LEN sizeof(struct vegetable)

struct vegetable { int num;

char vge_name[8]; char name[10]; float price; int mount; float discount; float money; int race;

struct vegetable *next; }; int n;

void print1() {printf(\"

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

struct vegetable *creat()//创建链表函数 {int i;

struct vegetable *p1,*p2,*head; FILE*f1;

f1=fopen(\"D:\\\\xy.txt\

p1=p2=head=(struct vegetable*)malloc(LEN); for(i=0;i<10;i++)

{fscanf(f1,\"%d%s%s%f%d%f\p1->discount);

p1=(struct vegetable*)malloc(LEN); p2->next=p1; p2=p1; }

p2=NULL;

return(head); }

void print(struct vegetable *head)//查询卖菜人信息函数 {int i;

char a[10];

13

scanf(\"%s\for(i=1;i<10;i++) {

if(strcmp(head->name,a)==0) break; else head=head->next;}

if(i==10) printf(\"无该人信息\\n\"); else

{printf(\"查找结果如下:\\n\");

printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); printf(\"├───┼────┼───┼──┼──┼──┤ \\n\");

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│

\\n\

printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); } }

float add3(struct vegetable *head) //一种菜的总价 {int i;

struct vegetable *p; p=head;

printf(\"┌────────┐\\n\"); printf(\"│ 菜名 │ 总金额 │\\n\"); for(i=1;i<=10;i++)

{printf(\"├───┼────┤\\n\"); printf(\"│%-6s│%-8.2f│

\\n\

p=p->next;}

printf(\"└────────┘\\n\"); }

float add4(struct vegetable *head)//所有菜的总数量和总金额 {int i,j,all=0; float all1=0.0;

struct vegetable *p,*b; p=head;b=head; for(j=0;j<10;j++) { p->money=(p->price)*(p->mount)*(p->discount); all1+=p->money; p=p->next;

14

}

for(i=0;i<10;i++) { all+=b->mount; b=b->next; }

printf(\"┌───┬────┐\\n\"); printf(\"│总数量│ 总金额 │\\n\"); printf(\"├───┼────┤\\n\"); printf(\"│%4d │%6.2f │\\n\ printf(\"└───┴────┘\\n\"); }

struct vegetable insert(struct vegetable *head)//插入函数 { int i,j;

struct vegetable *p,*p1,*p2,*p3,t; p1=malloc(LEN);

scanf(\"%d%s%s%f%d%f\discount);

p2=head;head=p1;p1->next=p2; p=head;

for(i=0;i<11;i++) { p2=p->next; for(j=0;j<10-i;j++) { if(p->numnum){t=*p;*p=*p2;*p2=t;

p3=p->next;p->next=p2->next;p2->next=p3;}

p2=p2->next; } p=p->next; }

printf(\"结果如下\\n\");

printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); for(i=0;i<11;i++) {

printf(\"├───┼────┼───┼──┼──┼──┤ \\n\");

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│

\\n\

15

head=head->next; }

printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); }

void dele(struct vegetable *head)//删除菜信息函数 { int i=0; char a[20];

struct vegetable *p,*p1; p=head;p1=head;

printf(\"请输入想删除的蔬菜名:\\n\"); scanf(\"%s\

while(strcmp(p->vge_name,a)!=0&&i<10) {p1=p;p=p->next;i++;} if(i==10) printf(\"无此菜信息\\n\"); else { if(i==0) { head=head->next;

printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); for(i=0;i<9;i++) {

printf(\"├───┼────┼───┼──┼──┼──┤

\\n\");

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│

\\n\

head=head->next; } printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); } else { p1->next=p->next; printf(\"┌───┬────┬───┬──┬──┬──┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│\\n\"); for(i=0;i<9;i++) {

printf(\"├───┼────┼───┼──┼──┼──┤

\\n\");

16

printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│

\\n\

head=head->next; } printf(\"└───┴────┴───┴──┴──┴──┘\\n\"); } } }

void sort(struct vegetable *head)//排序函数 { int i,j;

struct vegetable *p,*p1,*p2,*p3,t; p1=head; p=head;

for(i=0;i<10;i++) {

p1->money=p1->price*p1->mount*p1->discount; p1=p1->next; }

for(i=0;i<10;i++) { p2=p->next; for(j=0;j<10-i;j++) { if(p->moneymoney){t=*p;*p=*p2;*p2=t;

p3=p->next;p->next=p2->next;p2->next=p3;}

p2=p2->next; } p=p->next; }

printf(\"┌───┬────┬───┬──┬──┬──┬───┐\\n\"); printf(\"│ 编号 │ 菜名 │ 姓名 │单价│数量│折扣│ 总价 │\\n\"); for(i=0;i<10;i++) {

printf(\"├───┼────┼───┼──┼──┼──┼───┤ \\n\"); printf(\"│%6.2d│ %-6s │%-6s│%3.2f│%3d │%3.2f│%6.2f│

\\n\oney);

17

head=head->next; }

printf(\"└───┴────┴───┴──┴──┴──┴───┘\\n\"); }

main() {

int i,c; print1();

printf(\" ** 1.查询卖菜人信息

**\\n\");

printf(\" ** 2.输入一个新菜名的信息,按编号顺序将该信息插入后输

出 **\\n\");

printf(\" ** 3.输入一个已存在菜名信息,删除该菜名的信息后输出

**\\n\");

printf(\" ** 4.每种菜的总金额

**\\n\");

printf(\" ** 5.所有菜的总数量和总金额

**\\n\");

printf(\" ** 6.所有菜按金额进行降序排序并输出其信息

**\\n\");

printf(\" ** 7.退出程序

**\\n\");

print1();

printf(\" \\n 请输入需要执行的序号:\\n\"); creat();

scanf(\"%d\ switch(c)

{case 1:system(\"cls\");printf(\"请输入卖菜人姓名:\\n\");print(creat());break; case 2:system(\"cls\");insert(creat());break; case 3:dele(creat());break; case 4:add3(creat());break; case 5:add4(creat());break; case 6:sort(creat());break; case 7:break;

default: printf(\"\\n 输入有误!!\\n\\n\"); } }

18

六、心得体会

刚开始学C语言时不知该从何学起,书本上满满的代码,很多都看不懂。老师上课也很快,有点赶不上的节奏,有时候在上机的时候虽说程序能够看懂,有一定的理解。但自己去写一个程序却要花很长一段时间思考和编写。

在我看来,这门专业科还是要靠自己专研的,没有什么捷径可走。自己在课余时间试着去自己上机操作,按照课本的例题慢慢锻炼,最后再只看题,不看课本,有时自己也会去想一些方法,然后用这方法再去编写程序解决遇到的问题。只有这样不断的操作实践,才能让我的C语言有很大的提高。

此外,C语言的学习是一个需要耐心和细心的过程,到目前为止,有些时候一些编程还是会有一些小问题出现,有些时候会将“=”和“==”等效了,有时候会将“a*b”写成“ab”,因此在每次在编完程序试运行之前,我都会自己去检查一次,把编译的事情自己先做一次,逐渐地,我感觉编程出现问题的地方都能预先自己解决了。

对于C语言的学习我的感受就是实践比一味的去看课本效率更高,也学的更快更轻松,这次的C语言报告也给了我一次锻炼自己的机会,通过这次的实习报告让我对流程图的编写有了一定的认识。思路虽然不是太难,但流程图也比较难画。

总而言之,到此为止的C语言实习让我觉得很满足很充实,C语言的编程之中解决问题的思路,也都有了一定的了解。希望接下来的学习能够让我对C语言有更加深入的了解,也争取获得更好的成绩。

19

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