课程设计报告--一元多项式计算.doc_第1页
课程设计报告--一元多项式计算.doc_第2页
课程设计报告--一元多项式计算.doc_第3页
课程设计报告--一元多项式计算.doc_第4页
课程设计报告--一元多项式计算.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告一元多项式计算订票系统系 别 专 业 年 级 学 生 姓 名 学 号 任 课 教 师 二 一 二 年 三 月一、题目内容实验二 一元多项式计算*1任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减、相乘,并将结果输出;2.在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;实验三 订票系统1任务:通过此系统可以实现如下功能:1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。5)修改航班信息:当航班信息改变可以修改航班数据文件。2要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。 二、解题分析(一)、一元多项式计算分析:能够按照多项式变量的指数降序创建一个多项式;能够对已创建的多项式进行显示;能够对已创建的多项式之间的加法运算;能够对已创建的多项式之间的减法运算;能够对已创建的多项式之间的乘法运算;能够实现计算器退出操作。(二)、订票系统:能够按照规定输入航班的各个信息;能够对已输入的航班信息进行显示;能够对已创建的信息按照要求进行排序;能够对已创建的信息进行查找;能够完成订票,退票操作;能够实现系统退出操作。三、所用数据结构的描述(用伪代码)(一)、一元多项式计算:1、定义节点类型:typedef struct nodefloat coef; int expn; struct node * next; PLOY; 2、查找位置插入新链节程序: void insert(PLOY *head,PLOY *inpt) PLOY *pre,*now; int signal=0; pre=head;/*pre定义为现在的前一个链节*/ if(pre-next=NULL)pre-next=inpt; else now=pre-next; while(signal=0) if(inpt-expnexpn) /*当新链节小于现在的连接时向后移一个链节*/if(now-next=NULL) now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn) /*如果发现比现在的链节大了就插入到这个连接的前面*/inpt-next=now; pre-next=inpt; signal=1; else now-coef=now-coef+inpt-coef; signal=1; free(inpt);/*与当前链节相等指数*/ if(now-coef=0) pre-next=now-next; free(now); 3、输入多项式:PLOY *creat(char ch) PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(PLOY);/*创建链表头*/head-next=NULL; printf(请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)n,ch); scanf(%f %d,&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=x; inpt-expn=y; inpt-next=NULL; insert(head,inpt);/*不然就查找位置并且插入新链节*/ printf(请输入一元多项式%c的下一项:(以0 0 结束!)n,ch); scanf(%f %d,&x,&y); return head; 4、输出多项式:void print(PLOY *fun) PLOY *printing; int flag=0; printing=fun-next;/*正在被打印的链节*/ if(fun-next=NULL) /*如果函数为空打印0*/printf(0n); return; while(flag=0) if(printing-coef0&fun-next!=printing) printf(+);/*为正数时打印+号*/ if(printing-coef=1);/*如果为1就不用打印系数了*/ else if(printing-coef=-1) printf(-);/*如果为-1就打印-号就行了*/ else printf(%f,printing-coef);/*其余情况都得打印*/ if(printing-expn!=0) printf(x%d,printing-expn);/*如果指数为0不打印指数项*/ else if(printing-coef=1)|(printing-coef=-1) printf(1); if(printing-next=NULL) flag=1;/*如果现在的链节没有下一个就结束*/ else printing=printing-next; printf(n); (二)、订票系统:1、定义结构体:typedef struct plane char ID10; /*航班代号*/ char BePlace10;/*飞机起飞地点*/ char EnPlace10;/*飞机降落终点*/ char data15;/*飞机起飞时间*/ int max;/*飞机最大乘客人数*/ int price;/*飞机票价*/ int num;/*飞机已售票数*/PLANE;PLANE tiN;2、输入信息:void input(int i)printf(请输入航班代号:n);scanf(%s,tii.ID);printf(请输入起飞地点:n);scanf(%s,tii.BePlace);printf(请输入降落地点:n);scanf(%s,tii.EnPlace);printf(请输入起飞时间:n);scanf(%s,tii.data);printf(请输入航班的最大载客人数:n);scanf(%d,&tii.max);printf(请输入航班的票价:n);scanf(%d,&tii.price);tii.num=0;3、订票功能:void book() int i;system( cls ); printf(欢迎进入售票窗口!n); i=search();if(i!=-1)if(tii.num=tii.max)printf(n该趟航班票已售完!); elsetii.num+;printf(n订票成功!n);elseprintf(该航班不存在!n);getchar(); getchar(); /*按任意健*/menu();四、部分算法的描述(用伪代码)(一)、一元多项式计算:1、加法:PLOY *addPLOY(PLOY *head,PLOY *pre) /*多项式相加*/PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/*当现在指向空时跳出循环*/ else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /*否则把当前g(x)的链节插入到y(x)中*/ return head; 2、减法:PLOY *minusPLOY(PLOY *head,PLOY *pre) /*多项式相减*/PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/*当现在指向空时跳出循环*/ else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /*否则把当前g(x)的链节插入到y(x)中*/ return head; 3、乘法:PLOY *byPLOY(PLOY *head1,PLOY *head2) /*多项式相乘*/PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY);/*创建链表头*/ res-next=NULL; head1=head1-next; pre=head2; while(flag=0) if(pre-next=NULL) pre=head2;/*当现在指向空时跳出循环*/ head1=head1-next; continue; if(head1=NULL) flag=1;/*当现在指向空时跳出循环*/ continue; pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL; insert(res,inpt);/*把当前g(x)的链节插入到y(x)中*/ return res; (二)、订票系统:1、排序:void order() /*排序模块(按平均成绩)*/int i,j;struct plane s;system( cls ); for(i=0;in;i+) /*冒泡法排序*/for(j=i+1;j0)s=tii; tii=tij;tij=s; browse();2、查找:int search() /*查找模块*/int i,k;struct plane s;k=-1;system( cls ); printf(nn请输入要订票的起飞地点:);scanf(%s,s.BePlace); /*输入要到达的地方*/printf(nn请输入要订票的降落地点:);scanf(%s,s.EnPlace); printf(nn请输入要订票的起飞时间:);scanf(%s,s.data); /*输入出发的时间*/for(i=0;in;i+) /*查找要修改的数据*/if(strcmp(s.BePlace,tii.BePlace)=0&strcmp(s.EnPlace,tii.EnPlace)=0&strcmp(s.data,tii.data)=0)k=i; /*找到要修改的记录*/printf_one(k);break; /*调用显示一个记录的函数*/if(k=-1) printf(nnNO exist!); return -1;elsereturn k;3、保存:void save()int w=1;FILE *fp;int i;system( cls ); if(fp=fopen(ticket.txt,wt)=NULL) /*以输出打开方式,在此前的记录被覆盖*/printf(nCannot open filen);return ; for(i=0;in;i+)if(fwrite(&tii,sizeof(struct plane),1,fp)!=1) printf(file write errorn);w=0;if(w=1) printf(file save ok!n);fclose(fp);getchar();getchar(); menu();4、载入void load()FILE*fp;int i,w;w=1;system( cls ); if(fp=fopen(ticket.txt,rt)=NULL)printf(nCannotopen filen);w=0; return ;n=0;for(i=0;!feof(fp);i+)fread(&tii,sizeof( struct plane),1,fp);n+;n=n-1;fclose(fp);if(w=1)printf(Load file ok!);getchar();getchar(); menu();五、算法复杂度的简单分析(一)、一元多项式计算:1、加法:O(n)2、减法:O(n)3、乘法:O(n)(二)、订票系统:1、排序:O(n2)2、查找:O(n)3、保存:O(n)4、载入:O(n)六、程序测试数据(一)、一元多项式计算:1F(x)=f(x)+g(x)=(2x7+3x5+2x4+3x1)+(2x6+3x2+43x1)=(2x7+2x6+3x5+2x4+3x2+46)2F(x)=f(x)-g(x)=(3x5+8x2)-(54x3+2x2+5x1)=(162x8+6x7+15x6+432x5+16x4)3F(x)=f(x)*g(x)=(3x4+5x3+3x2)*(2x4+2x2+3x1)=(6x8+10x7+12x6+19x5+21x4+9x3)(二)、订票系统:部分截图:1.菜单 2排序3.查询4.订票5退票七、程序清单#include #include #include #include #define N 1000typedef struct node/*定义节点类型*/float coef; int expn; struct node * next; PLOY; typedef struct plane char ID10; /*航班代号*/ char BePlace10;/*飞机起飞地点*/ char EnPlace10;/*飞机降落终点*/ char data15;/*飞机起飞时间*/ int max;/*飞机最大乘客人数*/ int price;/*飞机票价*/ int num;/*飞机已售票数*/PLANE;PLANE tiN;int n;/*当前的航班数目*/void menu();void menu1();void start()/ /*用户选择界面*printf(*n); printf( 欢迎进入一元多项式计算系统 n); printf(*n); printf(请选择操作:n); printf(0.退出n); printf(1.两个一元多项式相加n); printf(2.两个一元多项式相乘n); printf(3.两个一元多项式相减n); void insert(PLOY *head,PLOY *inpt) /*查找位置插入新链节程序*/PLOY *pre,*now; int signal=0; pre=head;/*pre定义为现在的前一个链节*/ if(pre-next=NULL) pre-next=inpt;else now=pre-next; while(signal=0) if(inpt-expnexpn) / /*当新链节小于现在的连接时向后移一个链节*if(now-next=NULL) now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn) /*如果发现比现在的链节大了就插入到这个连接的前面*/inpt-next=now; pre-next=inpt; signal=1; else now-coef=now-coef+inpt-coef; signal=1; free(inpt);/*与当前链节相等指数*/ if(now-coef=0) pre-next=now-next; free(now); PLOY *creat(char ch) /*输入多项式*/PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(PLOY);/*创建链表头*/head-next=NULL; printf(请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)n,ch); scanf(%f %d,&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=x; inpt-expn=y; inpt-next=NULL; insert(head,inpt);/*不然就查找位置并且插入新链节*/ printf(请输入一元多项式%c的下一项:(以0 0 结束!)n,ch); scanf(%f %d,&x,&y); return head; PLOY *addPLOY(PLOY *head,PLOY *pre) /*多项式相加*/PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/*当现在指向空时跳出循环*/ else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /*否则把当前g(x)的链节插入到y(x)中*/ return head; PLOY *minusPLOY(PLOY *head,PLOY *pre) /*多项式相减*/PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/*当现在指向空时跳出循环*/ else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /*否则把当前g(x)的链节插入到y(x)中*/ return head; PLOY *byPLOY(PLOY *head1,PLOY *head2) /*多项式相乘*/PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY);/*创建链表头*/ res-next=NULL; head1=head1-next; pre=head2; while(flag=0) if(pre-next=NULL) pre=head2;/*当现在指向空时跳出循环*/ head1=head1-next; continue; if(head1=NULL) flag=1;/*当现在指向空时跳出循环*/ continue; pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/*创建新链节*/ inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL; insert(res,inpt); /*把当前g(x)的链节插入到y(x)中*/return res; void print(PLOY *fun) /*输出多项式*/PLOY *printing; int flag=0; printing=fun-next;/*正在被打印的链节*/ if(fun-next=NULL) /*如果函数为空打印0*/printf(0n); return; while(flag=0) if(printing-coef0&fun-next!=printing) printf(+);/*为正数时打印+号*/ if(printing-coef=1);/*如果为1就不用打印系数了*/ else if(printing-coef=-1) printf(-);/*如果为-1就打印-号就行了*/ else printf(%f,printing-coef);/*其余情况都得打印*/ if(printing-expn!=0) printf(x%d,printing-expn);/*如果指数为0不打印指数项*/ else if(printing-coef=1)|(printing-coef=-1) printf(1); if(printing-next=NULL) flag=1;/*如果现在的链节没有下一个就结束*/ else printing=printing-next; printf(n); int Polynomial_solve() PLOY *f,*g; int sign=-1;/*设置标志*/ start(); while(sign!=0) scanf(%d,&sign); switch(sign) case 0:exit(0);break;/*退出*/ case 1: printf(你选择的操作是多项式相加:n); f=creat(f);/*输入多项式f(x)*/ printf(f(x)=); print(f); g=creat(g);/*输入多项式g(x)*/ printf(g(x)=); print(g); printf(F(x)=f(x)+g(x)=); f=addPLOY(f,g);/*两个多项式相加*/ print(f); sign=-1;/*复位标志*/ start();/*回复用户选择界面*/ break; case 2: printf(你选择的操作是多项式相乘:n); f=creat(f);/*输入多项式f(x)*/ printf(f(x)=); print(f); g=creat(g);/*输入多项式g(x)*/ printf(g(x)=); print(g); printf(F(x)=f(x)*g(x)=); f=byPLOY(f,g);/*两个多项式相加*/ print(f); sign=-1;/*复位标志*/ start();/*回复用户选择界面*/ break; case 3: printf(你选择的操作是多项式相减:n); f=creat(f);/*输入多项式f(x)*/ printf(f(x)=); print(f); g=creat(g);/*输入多项式g(x)*/ printf(g(x)=); print(g); printf(F(x)=f(x)-g(x)=); f=byPLOY(f,g);/*两个多项式相加*/ print(f); sign=-1;/*复位标志*/ start();/*回复用户选择界面*/ break; default: printf(输入有误!请重新选择操作!n);/*选择错误,返回选择界面*/ start(); break; void input(int i)printf(请输入航班代号:n);scanf(%s,tii.ID);printf(请输入起飞地点:n);scanf(%s,tii.BePlace);printf(请输入降落地点:n);scanf(%s,tii.EnPlace);printf(请输入起飞时间:n);scanf(%s,tii.data);printf(请输入航班的最大载客人数:n);scanf(%d,&tii.max);printf(请输入航班的票价:n);scanf(%d,&tii.price);tii.num=0;void enter()int i;system( cls ); printf(请输入航班的数目(0-%d)?:,N);scanf(%d,&n); /*要输入的记录个数*/printf(n请输入数据nn);for(i=0;in;i+)printf(n请输入第 %d 航班记录.n,i+1);input(i); /*调用输入函数*/getchar(); menu();void printf_one(int i) /*显示一个记录的函数*/printf(%11s %6s %10s %6s %6d %6d %6d,tii.ID,tii.BePlace,tii.EnPlace,tii.data,tii.price,tii.max,tii.num);void browse()int i;system( cls ); puts(n-);printf(nt航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数n);for(i=0;in;i+)printf_one(i);printf(n);getchar();getchar();menu();void order()/*排序模块(按平均成绩)*/int i,j;struct plane s;system( cls ); for(i=0;in;i+)/*冒泡法排序*/for(j=i+1;j0)s=tii;tii=tij;tij=s;browse();void search_time()int i,m=0;struct plane s;system( cls ); printf(nnEnter the time:);scanf(%s,s.data); /*输入出发的时间*/puts(n-);printf(nt航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数n);for(i=0;in;i+)if(strcmp(s.data,tii.data)=0)m+;if(m!=0)&(m%10=0) /*目的是分屏显示*/printf(nnPress any key to contiune . . .);getchar();puts(nn);printf_one(i); printf(n);/*调用显示一个记录的函数*/puts(n-);getchar(); /*按任意健*/getchar(); menu1();void serch_end()int i,m=0;struct plane s;system( cls ); printf(nnEnter the end Place:);scanf(%s,s.EnPlace); /*输入要到达的地方*/puts(n-);printf(nt航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数n);for(i=0;in;i+)if(strcmp(tii.EnPlace,s.EnPlace)=0)m+;if(m!=0)&(m%10=0) /*目的是分屏显示*/printf(nnPress any key to contiune . . .);getchar();puts(nn);printf_one(i); printf(n);/*调用显示一个记录的函数*/puts(n-);getchar(); /*按任意健*/getchar(); menu1();void menu1()int n,w1; do system( cls ); /*清屏*/ puts(tttt 飞机售票操作!nn); puts(tt*MENU*nn); puts(tttt1.按照时间排序); puts(tttt2.按照时间查找航班); puts(tttt3.按照地点查找航班); puts(tttt4.返回主菜单); puts(nntt*n); printf(Choice your number(1-4): bb); scanf(%d,&n); if(n4)/*对选择的数字作判断*/ w1=1; printf(your choice is not between 1 and 4,Please input again:); getchar();getchar(); else w1=0; while(w1=1);switch(n)/*选择功能* / case 1:order();break; case 2:search_time();break; case 3:serch_end();break; case 4:menu();break; int search() /*查找模块*/int i,k;struct plane s;k=-1;system( cls ); printf(nn请输入要订票的起飞地点:);scanf(%s,s.BePlace); /*输入要到达的地方*/printf(nn请输入要订票的降落地点:);scanf(%s,s.EnPlace); printf(nn请输入要订票的起飞时间:);scanf(%s,s.data); /*输入出发的时间*/for(i=0;i=tii.max)printf(n该趟航班票已售完!);elsetii.num+;printf(n订票成功!n);elseprintf(该航班不存在!n);getchar(); getchar(); /*按任意健*/menu();void back()int i,k=-1;struct plane s;system( cls ); printf(欢迎进入退票窗口!n);printf(nn输入航班代号:);scanf(%s,s.ID); /*输入要到达的地方*/for(i=0;in;i+)/*查找要修改的数据*/if(strcmp(s.ID,tii.ID)=0)k=i; /*找到要修改的记录*/printf_one(k);break; /*调用显示一个记录的函数*/if(k=-1)printf(nnNO exist!);elsetii.num-;printf(n退票成功!n);getchar(); /*按任意健*/getchar(); /*按任意健*/menu();void save()int w=1;FILE *fp;int i;system( cls ); if(fp=fopen(ticket.txt,wt)=NULL) /*以输出打开方式,在此前的记录被覆盖*/printf(nCannot open filen);return ;for(i=0;in;i+)if(fwrite(&tii,sizeof(struct plane),1,fp)!=1) printf(file write errorn);w=0;if(w=1)printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论