数据结构课程设计(1)_第1页
数据结构课程设计(1)_第2页
数据结构课程设计(1)_第3页
数据结构课程设计(1)_第4页
数据结构课程设计(1)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、精品文档 课程设计报告册2021 2021 学年度 第 一 学期 计算机 院/系 信息管理与信息系统 专业 11 年级 1 班课程名称: 数据结构课程设计 姓 名: XXX 学 号: XXX 1. 程序设计与实现1.1一元多项式计算1.需求分析建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并储存在内存中,能够完成两个多项式的加减运算并输出结果。2.概要设计存储结构:一元多项式的的表示可以在计算机内用链表表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式非零的项,它包含三个域,分别存放该项的系数、指数及指向下一个多项式结点的指针。创立一元多项式链表,对

2、一元多项式的运算会出现各种可能情况进行分析,实现一元多项式的相加、相减操作。原因:多项式项数不确定,并且指数不一定相连,宜采用链表。所要设计的模块有:(1).void start()/用户选择界面的功能模块。(2).void insert(PLOY *head,PLOY *inpt)/查找位置插入新链节程序的功能模块。(3).PLOY *creat(char ch)/输入并建立多项式的功能模块。此模块按照指数递减的顺序和一定的输入格式输入各个子项的“系数-指数对,循环输入一个子项建立一个相关结点,当输入结束标志的时候就停止输入。(4).PLOY *addPLOY(PLOY *head,PLOY

3、 *pre)/多项式相加的功能模块。此模块根据建立的两个多项式f(x),g(x)进行相加的运算,存放在Fx中,并不改变Fx链表。(5).PLOY *minusPLOY(PLOY *head,PLOY *pre)/多项式相减的功能模块。此模块根据建立的两个多项式f(x),g(x)进行相减的运算,存放在Fx中,并不改变Fx链表。(6).PLOY *byPLOY(PLOY *head1,PLOY *head2)/多项式相乘的功能模块。此模块根据建立的两个多项式f(x),g(x)进行相乘的运算,存放在Fx中,并不改变Fx链表。(7).void print(PLOY *fun)/输出多项式的功能模块。(

4、8).主函数main() ,利用switch()实现各函数的调用,系统根据用户输入的数字来调用相应的函数。3.详细设计核心算法程序段:(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=p

5、re->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);/创立新

6、链节 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; hea

7、d1=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-

8、>expn; inpt->next=NULL; insert(res,inpt);/把当前"g(x)"的链节插入到"y(x)"中 return res; 主界面设计:采用菜单方式,用数字选择调用的模块void start()/用户选择界面 printf("*n"); printf(" 两个一元多项式的相加/相减,相乘:n"); printf("*n"); printf("请选择操作:n"); printf("0.退出n"); printf(&q

9、uot;1.两个一元多项式相加n"); printf("2.两个一元多项式相乘n"); printf("3.两个一元多项式相减n"); 4.调试报告问题:(1)如何定义结构体?(2)该采用哪种存储结构?方案:(1)首先要了解一元多项式每一项的格式统一,都有系数、底数、指数构成,并且底数都为x。然后将它抽象为一个由“系数=指数对构成的线性表进行定义结构体。 (2)由于经常进行插入与删除操作,从效率上考虑,应该采用链表存储结构。所用的测试数据,测试输出的结果至少两组测试数据以截图方式表示。多项式相加多项式相减1.2银行储蓄业务账目管理1.需求分析银

10、行储蓄业务中,最根本的是活期储蓄业务,其中,储户开户、销户、存入、支取操作最为频繁,系统设计要求模拟实现:(1).比拟简单,迅速地实现插入和删除,以实现开户和销户的需求。(2).能比拟迅速地找到储户的帐户,以实现存款、取款记账; 2.概要设计(1).程序所实现的功能:储户开户、储户销户、储户的账号存款与取款、返回菜单、查看所有储蓄账户信息与退出账目管理。(2).程序主要包含的函数: 开户:void InsertList(); 销户:void DeleteList(); 打印信息:void PrintList(); 存取款:void Deposit(); 登录账号:void Search();

11、加载与保存数据:void print(); 主界面:void menu(); 选择:void choice(); 主函数:int main();3.详细设计程序采用的结构体:typedef struct ElemType char name8; int account; char password6; float money;ElemType;typedef struct lnode ElemType data; struct lnode *next;LINK;核心算法程序段: (1).开户void InsertList(LINK *&L)/开户 LINK *s; s=(LINK*)m

12、alloc(sizeof(LINK); printf("请输入你要开户的姓名:"); scanf("%s",s->); s->data.account=10001000+total+; printf("n你开户的账号为:%dn",s->data.account); printf("请输入你账号的密码:"); scanf("%s",s->data.password); s->data.money=0.00; s->next=NULL; if(L

13、->next=NULL) L->next=s; else s->next=L->next; L->next=s; printf("开户成功。n");(2).销户void DeleteList(LINK *&L)/销户 LINK *p=L,*q; char pass6; int s; printf("请输入你要销户的账号:"); scanf("%d",&s); printf("请输入该账号的密码:"); scanf("%s",pass); while(

14、p->next!=NULL) if(p->next->data.account=s) break; p=p->next; if(p->next!=NULL) while(strcmp(p->next->data.password,pass)!=0) printf("密码错误!请重新输入:"); scanf("%s",pass); q=p->next; p->next=q->next; free(q); printf("账号销户成功。n"); else printf("

15、;你所要销户的的账号不存在(或者已经销户)。n"); (3).存取款void Deposit(LINK *&L,LINK *p)/存取款 int cq; float mn; while(1) if(p!=NULL) printf("请选择存款(1)、取款(2)、查询余额(3)、退出账号(4)。n(请输入括号内的数字,输入其它字符默认为取款):"); scanf("%d",&cq); if(cq=1) printf("请输入你的存款金额:"); scanf("%f",&mn); p-

16、>data.money=p->data.money+mn; printf("存款成功!n"); else if(cq=3) printf("你账户的余额为:%.2fn",p->data.money); else if(cq=4) printf("账号退出成功。n"); return; else printf("请输入你的取款金额:"); FH: scanf("%f",&mn); if(p->data.money-mn)>=0) p->data.mone

17、y=p->data.money-mn; printf("取款成功!n"); else printf("取款失败!n"); printf("你账户上的金额缺乏!你的账户余额为:%.2fRMBn",p->data.money); printf("请输入适宜的取款金额:"); goto FH; (4).登录账号void Search(LINK *L)/登录账号 LINK *p=L->next; int acc; char pass6; printf("请输入你要登录的账号:"); s

18、canf("%d",&acc); printf("请输入你的密码:"); scanf("%s",pass); while(p!=NULL) if(p->data.account=acc) break; p=p->next; if(p=NULL) printf("不存在该账户n"); else if(strcmp(p->data.password,pass)=0) printf("账号登录成功。n"); else while(strcmp(p->data.passw

19、ord,pass)!=0) char pa; printf("密码错误n"); printf("是否重新输入(是,就输入任意键)、(否,从键盘上输入N or n):"); scanf("n%c",&pa); if(pa='n'|pa='N') system ("cls");return; printf("n请重新输入你的密码:"); scanf("%s",pass); Deposit(L,p); 主界面设计:采用菜单方式,用数字选择调用

20、的模块void menu() printf("*欢送进入活期储蓄账目管理*n"); printf(" 1.储户开户。n"); printf(" 2.储户销户。n"); printf(" 3.储户的账号存款、取款。n"); printf(" 4.返回菜单。n"); printf(" 5.查看所有储蓄账户信息。n"); printf(" 6.退出账目管理。n"); printf("*n");模块结构图银行活期储蓄账目管理系统 退出账目管理返

21、回菜单查看所有储蓄账户信息用户开户用户销户储户的账号存款、取款4.调试报告刚开始做时,感觉什么事情都做不好,但是经过同学的指导下,经过屡次调试后,终于成功地实现模块功能,构造出银行活期储蓄账目管理系统。以下截图为系统实现的功能。开户:存款、取款、查询余额查询储户信息销户:1.3学生成绩管理系统1.需求分析1.1 系统菜单的主要功能1增加学生成绩2查看学生成绩3查找学生成绩4删除学生成绩5统计总成绩与平均分6输出前n名学生成绩7输出不及格人数8修改学生成绩9保存数据0退出程序 1.2功能分析功能1为输入一条记录到结构体中去。功能2、3、4和8算法相似,都是先查找成绩,4、8在此根底上再对查找出的

22、信息进行操作。功能6输出成绩并输出相关的学生信息等。功能5统计全班的总成绩与平均分功能7输出不及格人数2.概要设计(1).学生成绩管理系统包括成绩的录入、修改、删除、查找、统计、输出等功能。(2).程序主要包含的函数:struct student ; /定义结构体int dq(struct student st); /void xianshi(); /输出选择学生成绩管理系统中调用模块的界面void bc(struct student st); /void add(); /增加学生成绩void select(); /查看学生成绩void chazhao(); /查找void xhcz(); /

23、按学号查找void xmcz(); /按姓名查找void del(); /删除学生成绩void xmsc(); /按姓名删除void xhsc(); /按学号删除void tj(); /统计void px(); /排序void bjg(); /输出不及格void xg(); /修改学生成绩void xhxg(); /按学号修改void xmxg(); /按姓名修改void bca(); /保存void fh(); /返回主界面(3).利用switch()实现各函数的调用,系统根据用户输入的数字来调用相应的函数。3.详细设计主界面设计:采用菜单方式,用数字选择调用的模块void xianshi(

24、) printf("t*n"); printf("t* *n"); printf("t* 学生成绩管理系统*n"); printf("t* *n"); printf("t* 1 增加学生成绩2 查看学生成绩*n"); printf("t* 3 查找学生成绩4 删除学生成绩*n"); printf("t* 5 统计总成绩和平均分6 输出前N名学生成绩*n"); printf("t* 7 输出不及格人数8 修改学生信息*n"); print

25、f("t* 9 保存数据*n"); printf("t* 0 退出系统*n"); printf("t*n"); 程序采用的结构体:struct student char name60; char ID7; int score; ;核心算法程序:1、void xg() /修改学生信息 ,通过学号或者姓名的方式查找后进行修改 int way=0; printf("请选择修改查找方式n"); printf("1 按姓名查找修改n"); printf("2 按学号查找修改n"); s

26、canf("%d",&way); switch(way) case 1: xmxg(); break; case 2: xhxg(); break; default: printf("输入有误,结束!n"); break; 此外,删除与查找学生成绩信息的模块也是通过调用switch()函数,用学号或者是姓名的方式进行删除或者查找。2、输出前N名学生成绩的关键程序for(i=0;i<Number-1;i+) for(j=i;j<Number-1;j+) if(stj.score>stj+1.score) temp=stj; stj

27、=stj+1; stj+1=temp; 3、输出不及格人数的关键程序for (i=0;i<Number;i+) if (sti.score<60) printf("t%st%st%dn",,sti.ID,sti.score); 4、增加学生成绩信息的程序段void add()/增加学生 int numberTemp=0; int i=0; struct student temp; /临时保存信息 printf("请输入要增加学生成绩个数:"); scanf("%d",&numberTemp); fo

28、r(i=0;i<numberTemp;i+) printf("输入第%d个同学信息n",i+1); printf("姓名:"); scanf("%s",); printf("学号:"); scanf("%s",temp.ID); printf("成绩:"); scanf("%d",&temp.score); stNumber+=temp; /将刚添加的写入到数组 bc(&temp); /将刚添加的写入到文件 printf("添加成功n"); 5、统计总成绩与

温馨提示

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

评论

0/150

提交评论