数据结构课程设计.docx

上传人:b****8 文档编号:10661512 上传时间:2023-02-22 格式:DOCX 页数:17 大小:56.06KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共17页
数据结构课程设计.docx_第2页
第2页 / 共17页
数据结构课程设计.docx_第3页
第3页 / 共17页
数据结构课程设计.docx_第4页
第4页 / 共17页
数据结构课程设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

长治学院

课程设计报告

课程名称:

数据结构

 

设计题目:

购房贷款管理系统(等额本息)

系别:

计算机系

专业:

计算机科学与技术

组别:

7

学生姓名:

武文超学号:

12407237

起止日期:

2013年9月23日~2013年12月29日

指导教师:

孙俊杰

 

目录

第一章需求分析3

1.1课程设计题目3

1.2课程设计任务及要求3

1.3课程设计思想3

1.4软硬件运行环境及开发工具3

第二章概要设计4

2.1主要的数据结构4

2.2流程图4

2.3所用方法及其原理的简要说明5

第三章详细设计5

3.1计算公式及过程5

3.2程序代码6

3.2.1建立算法程序6

3.2.2删除算法程序8

第四章调试与操作说明12

4.1运行与测试期间遇到的问题及其解决办法12

4.2说明12

第五章课程设计总结与体会12

谢辞:

14

参考文献:

14

附录:

14

 

购房贷款管理系统(等额本息)

-----采用不带头结点的单链表利用类型定义二(第一部分)

专业:

计算机科学与技术姓名:

武文超学号:

12407237

指导教师:

孙俊杰

第一章需求分析

1.1课程设计题目

题目:

购房贷款管理系统(等额本息)

-----采用不带头结点的单链表利用类型定义二(第一部分)

1.2课程设计任务及要求

任务:

(1)系统结构:

身份证、姓名、工作单位、贷款额、贷款日期、贷款期限、贷款利率、还款形式、还款额,信贷员。

(2)系统内容:

密码启动修改模块,数据录入模块,还款计划模块,数据删除模块,数据统计模块(分别统计贷款人数,贷款总额;还款人数,还款总额,还款本金,还款利息;已还本金,已还利息;欠款人数,欠款总额,欠款本金,欠款利息)。

要求:

(1)系统中不能同时保存两个身份证号一样的人

(2)当系统中存在一个数据库时,不能重新建立新数据库或不能从磁盘中读取新的数据库;系统中可实现几个库的切换,但内存中只能有一个库。

(3)还款计划可打印成文本文件输出。

(4)界面友好,易于操作。

1.3课程设计思想

链式存储结构中的每个结点都包含数据域和指针域两个部分,它用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,线性表的逻辑顺序与存储顺序不是始终一致。

每个链表要占用的空间不必事先预定,而可以在需要时申请。

是一种可以灵活实现动态分配和管理的存储结构。

此处运用单链表的基本结构类型,综合运用各种运算,完成课程设计的任务及要求。

1.4软硬件运行环境及开发工具

硬件设备:

计算机一台

操作系统:

Windows7

使用环境:

VisualC++6.0.

第二章概要设计

2.1主要的数据结构

数据采用链式结构存储,每个链表要占用的空间不必事先预定,而可以在需要时申请。

表的增长通过动态存储分配解决,表的收缩通过动态存储释放实现。

2.2流程图

 

 

图1程序流程图

2.3所用方法及其原理的简要说明

后插法建立链表、密码启动修改、利用查找删除信息、系统时间提取函数、C语言文件知识、调用库函数以及各个模块之间的相互调用。

第三章详细设计

3.1计算公式及过程

按等额本息还款法:

设贷款额为a,月利率为r,年利率为R,还款月数为m,每月还款额为b,还款利息总和为x,还款总额为y

1:

R=12×r

2:

x=m×b-a

3:

第一月还款利息为:

a×r

第二月还款利息为:

〔a-(b-a×r)〕×r=(a×r-b)×(1+r)^1+b

第三月还款利息为:

{a-(b-a×r)-〔b-(a×r-b)×(1+r)^1-b〕}×r=(a×r-b)×(1+r)^2+b

第四月还款利息为:

(a×r-b)×(1+r)^3+b.....

第n月还款利息为:

(a×r-b)×(1+r)^(n-1)+b

求以上和为:

x=(a×r-b)×〔(1+r)^n-1〕÷r+n×b

4:

以上两项x值相等求得

月均还款:

b=a×r×(1+r)^m÷〔(1+r)^m-1〕

支付利息:

x=m×a×r×(1+r)^m÷〔(1+r)^m-1〕-a

还款总额:

y=m×a×r×(1+r)^m÷〔(1+r)^m-1〕

注:

a^b表示a的b次方。

 

3.2程序代码

3.2.1建立算法程序

voidsetlink(linklist*h)

{/*(采用后插法)建立单链表*/

charnumstr[15],ch;

lNode*q,*p,*r;

doubley;

printf("是否录入数据?

(y/n)");

scanf("%c%*c",&ch);

if(ch=='y')

{

printf("输入身份证号姓名单位贷款贷款日期期限利率方式总额信贷员\n");

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

p->next=NULL;

h->head=p;q=p;

}

while(ch=='y')

{

printf("输入身份证号:

");

gets(numstr);

while(!

strlen(numstr)||!

flagint(numstr))

{

printf("输入身份证号:

");

gets(numstr);

}

r=h->head;

while(r!

=NULL&&!

(strcmp(r->numb,numstr)==0))r=r->next;

if(r!

=NULL)

{

printf("身份证号已经存在!

是否重新录入数据?

(y/n):

");

scanf("%c%*c",&ch);

if(ch=='y')continue;

elsebreak;

}

strcpy(p->numb,numstr);

printf("输入姓名:

");

gets(p->name);

while(!

strlen(p->name)||flagint(p->name))

{

printf("输入姓名:

");

gets(p->name);

}

printf("输入工作单位:

");

gets(p->gzdw);

while(!

strlen(p->gzdw))

{

printf("输入工作单位:

");

gets(p->gzdw);

}

printf("输入贷款额(元)");

gets(numstr);

while(!

strlen(numstr)||!

flagints(numstr))

{

printf("输入贷款额(元)");

gets(numstr);

}

p->dkee=atof(numstr);

printf("输入贷款日期(2013.11.11):

");

gets(p->dkrq);

while(!

strlen(p->dkrq)||!

flagday(p->dkrq))

{

printf("输入贷款日期(2013.11.11):

");

gets(p->dkrq);

}

printf("输入贷款期限(年):

");

gets(numstr);

while(!

strlen(numstr)||!

flagint(numstr))

{

printf("输入贷款期限(年):

");

gets(numstr);

}

p->dkqx=atoi(numstr);

printf("输入贷款利率(年息):

");

gets(numstr);

while(!

strlen(numstr)||!

flagints(numstr))

{

printf("输入贷款利率(年息):

");

gets(numstr);

}

p->dkll=atof(numstr);

strcpy(p->dkxs,"本息");

y=pow((1+p->dkll/1200),p->dkqx*12);/*计算:

(1+月利率)^还款次数*/

p->hkje=p->dkee*p->dkqx*12*(p->dkll/1200)*y/(y-1);printf("输入信贷员:

");

gets(p->sidy);

while(!

strlen(p->sidy)||flagint(p->sidy))

{

printf("输入信贷员:

");

gets(p->sidy);

}

if(p!

=h->head)

{

p->next=q->next;

q->next=p;

q=q->next;

}

printf("是否继续录入数据?

(y/n)\n");

scanf("%c%*c",&ch);

if(ch=='y')

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

}

}

3.2.2删除算法程序

lNode*delnumb(linklist*h)

{/*按身份证号删除*/

lNode*p,*q;charnumb[15];charch,chs='y';

printlink(*h);

printf("\n\n");

while(chs=='y')

{

printf("请输入要删除记录的身份证号:

");

gets(numb);

while(!

strlen(numb)||!

flagint(numb))

{

printf("请输入要删除记录的身份证号:

");

gets(numb);

}

p=h->head;

while(p!

=NULL&&strcmp(p->numb,numb)!

=0)p=p->next;

if(p!

=NULL)

{

printf("\n\n身份证号姓名单位贷款贷款日期期限利率方式总额信贷员\n");

printf("%s%7s%7s%11.1lf%12s%4d%7.3lf%%本息%10.2lf%7s\n",p->numb,p->name,p->gzdw,p->dkee,p->dkrq,p->dkqx,p->dkll,p->hkje,p->sidy);

printf("\n是否删除此条记录?

(y/n):

");

scanf("%c%*c",&ch);

if(ch=='y')

{

if(p==h->head)

{

h->head=h->head->next;

q=h->head;

}

else{

q=h->head;

while(q->next!

=p)q=q->next;

q->next=p->next;

}

free(p);

printf("\n此条记录已经被删除!

!

!

");

}

}

elseprintf("\n该条记录不存在,无法进行删除操作!

!

!

");

printf("\n是否继续进行删除操作?

(y/n):

");

scanf("%c%*c",&chs);

}

returnh->head;

}

lNode*delname(linklist*h)

{/*按姓名删除*/

lNode*p,*q;

intfound,i;

charch,chs='y',cha,str[15];

printlink(*h);

printf("\n\n");

while(chs=='y')

{

printf("请输入要删除记录的姓名:

");

gets(str);

p=h->head;

found=1,i=0;

while(p!

=NULL&&found)

{

if(strcmp(p->name,str)==0)

{

printf("\n\n身份证号姓名单位贷款贷款日期期限利率方式总额信贷员\n");

printf("%s%7s%7s%11.1lf%12s%4d%7.3lf%%本息%10.2lf%7s\n",p->numb,p->name,p->gzdw,p->dkee,p->dkrq,p->dkqx,p->dkll,p->hkje,p->sidy);

printf("\n是否删除此条记录?

(y/n):

");

scanf("%c%*c",&ch);

if(ch=='y')

{

i++;

if(p==h->head)

{

h->head=h->head->next;

free(p);

p=h->head;

}

else{

q=h->head;

while(q->next!

=p)q=q->next;

q->next=p->next;

free(p);

p=q->next;

}

printf("\n此条记录已经被删除!

!

!

");

printf("\n是否继续查找相同姓名的记录?

(y/n):

");

scanf("%c%*c",&cha);

if(cha!

='y')

found=0;

}

elsep=p->next;

}

elsep=p->next;

}

if(i==0)printf("\n该条记录不存在,无法进行删除操作!

!

!

");

printf("\n是否重新进行删除操作?

(y/n):

");

scanf("%c%*c",&chs);

}

returnh->head;

}

 

第四章调试与操作说明

4.1运行与测试期间遇到的问题及其解决办法

问题1:

日期卡得不是太严,好几种形式都能进入系统运行程序。

解决方法:

找资料、请教同学。

问题2:

删除记录时,可以按姓名删除原数据库中没有的记录。

解决方法:

修改程序的右括号位置。

问题3:

不知怎样从磁盘读入算法程序。

解决方法:

复习C语言文件知识、请教同学。

4.2说明

有时程序好编,但调试会很繁琐。

程序较长时,可将程序分块,将程序打注释,找到程序中第一个有错误的地方,不断改正,不断调试与改进;也有可能不提示错误,但运行时出现错误,这时就需要冷静、仔细分析程序,不断改进,以达到预期效果。

第五章课程设计总结与体会

经过一个学期的学习,我对数据结构这门课程有了很大的了解。

这次的课程设计让我对自己的专业也有了更进一步的了解,也使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的。

只有把所学的理论知识与实践相结合起来,从理论中得出结论,从实践中验证理论,从而提高自己的实际动手和独立思考的能力才是成功之道。

当然,在设计的过程中遇到许许多多的问题,也可以说是困难重重,毕竟这是一次课程设计,需要掌握的知识面比较广,同时在设计的过程中也发现了自己的不足之处,对之前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

在设计中vc++软件使用的也更加的娴熟,也更加深刻的了解作为一名计算机专业的大学生,我们不仅要有过硬专业知识,更重要的是耐心和恒心。

一个看似简单的程序,也许我们只需要短短十几分钟就可以编写完成,但是我们却需要一个小时甚至更长的时间来不断地调试和改进它,让它变得完美。

但就是在这不断地修改中,我们体会到了编程带给我们的乐趣和程序完美运行时的激动快乐。

我相信其他专业的同学们是永远体会不到这样的快乐。

刚刚拿到题目的时候,心里真的是有一点小小的激动,感觉自己距离传说中的程序员更近了一步。

但是当我正式开工的时候,突然觉得很茫然,不知道应该从哪里下手。

但是通过研究学长、学姐们去年的模板,我渐渐有了思路,慢慢知道了如何下手。

我在一次次的错误中仔细研究,在一次次的警告中细心摸索,一个个模块的顺利完成,让我真的体会到了成功的喜悦。

我的课程设计内容是购房贷款管理系统,采用无头结点,单链表定义二。

系统内分为数据录入、查找、修改、插入、删除模块,还有还款情况,还款计划等模块,还具有建立数据库、调用数据库和数据库之间的切换的功能,十分方便用户使用。

每一个模块都经过了很多次的修改、完善,争取做到完美。

可是最后还是有一部分模块出现了一些小问题,没能达到完美的效果,但是我会继续努力修改,将我人生中的第一个大型编程任务换上一个圆满的句号!

这并不是一个结束,反而是另一个新的开始,是我成为一名合格的程序员的开始!

通过这次课程设计使我进一步达到理论与实际相结合,提高了自己组织数据及编写程序的能力,培养良好的程序设计技能,掌握设计程序的思路,学会用计算机语言编写程序,以实现所需处理的任务,锻炼自己的动脑能力,学会用自己的思路解决现实中的问题,虽然一开始也走了一些弯路,不过在同学和老师的帮助下顺利完成了这次课程设计任务。

这次课程设计中遇到了很多问题。

比如在编写删除模块的时候,一开始没有考虑到重名的情况,再敲完程序之后运行的时候才发现了这个严重的设计错误,而且很多模块之间还有联系,一个模块出错很多模块就需要跟着修改,所以无奈的还得从头修改。

我在调试过程中,还发生了许多小细节上的问题,它们提醒了我要在以后编程的时候注意细节,即使是一个分号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,所以当我们编写程序的时候,一定要仔细、认真、专注,千万不能三心二意,马马虎虎。

我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。

有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。

修改的时候也有不小心误删的情况出现。

如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。

还有一点,就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。

回顾这次的课程设计,令我仍感慨颇多。

从拿到题目到完成整个编程,从理论到实践,在整整两个星期的日子里,我学到了很多的东西,不仅巩固了以前所学过的知识加深了对编程知识的认识,而且学到了很多在书本上所没有学到过的知识,尤其是那些从书本里学不到的经验。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正的学好一门课。

这次的课程设计虽然完成了,但是我的编程之路才刚刚开始。

我要以此次课程设计为起点,不断的锻炼自己,加强自己的编程能力,了解更多的计算机知识,在学习中不断提高自己,完善自己。

为以后考研,找工作打下坚实的基础。

这次课程设计真的很锻炼人,让我学习到很多做人的道理:

做什么事情都要认真仔细、有恒心、有耐心,要善始善终,把每一件事情都尽自己最大的努力去完成,这样在回忆这件事的时候才不会后悔自责!

我很感谢在做课程设计过程同学们对我的帮助,让我体会到团队力量的强大!

致谢:

最后我很感谢在我完成课程设计过程中孙俊杰老师我的帮助。

没有您的帮助不可能这么快、这么好的完成此次课程设计。

是您在我迷茫时是给予我帮助,真的很感谢您!

 

参考文献:

【1】《C程序设计(第四版)》,谭浩强编著,清华大学出版社,2010

【2】《C程序设计(第四版)学习辅导》,谭浩强编著,清华大学出版社,2010

【3】《数据结构(C语言版)》,严蔚敏,吴伟民著,清华大学出版社,2007

 

附录:

暂无。

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

1、设计过程中出勤、学习态度等方面

0.1

2、设计技术水平

0.4

3、编程风格

0.2

4、设计报告书写及图纸规范程度

0.3

总成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1