高级语言程序设计报告.docx
《高级语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
![高级语言程序设计报告.docx](https://file1.bdocx.com/fileroot1/2023-7/16/adb3b2d8-7069-4147-812f-0f8effe9206f/adb3b2d8-7069-4147-812f-0f8effe9206f1.gif)
高级语言程序设计报告
高级语言程序设计报告
(基于数组的图书管理系统)
班级:
姓名:
时间:
2012年6月
1.课题分析
编写目的:
C语言程序设计上机设计是C语言程序设计的一重要环节,课程设计能提高同学们程序设计能力,使同学们初步掌握程序设计的基本方法和调试技能。
通过上机设计掌握基本的编程语言,会使用简单的程序结构进行编程,能够通过小组的配合完成对简单实际问题进行程序化语言程序设计。
需求概述:
设计一个图书信息管理系统,使之能提供以下功能:
1)密码登录保护
2)图书信息添加
3)图书信息查找
4)图书信息修改和保存
5)图书信息删除
6)图书按图书序号排序
需求说明:
图书信息包括图书编号、图书的书名,作者名、出版社、出版日期等信息,并且要求图书编号不重复;
录入的的图书基本信息以数组的形式保存在文件中,并可以对其进行添加、查询、修改、删除等基本操作;
图书信息的显式有一定的规范格式;
对图书信息应能够分别按图书书名及按图书作者名两种方式进行,要求能返回所有符合条件的图书信息;
对图书信息的修改应逐个地进行,一本图书的信息的更改不影响其他的图书信息记录;
所设计的系统应以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况,并能够根据不同的情况进行不同的应对。
2.总体设计
编写目的:
根据课题设计要求,提出问题的解决方案,以软件系统的体系结构和数据结构为基础以已学过的C语言编程知识写出书面文档总体设计说明书,为程序的详细设计做准备,为详细设计做铺垫。
总体设计:
1.该系统可以按功能进行模块划分,其模块图如下:
密码
密码
图书添加
退出
按书名查找
按作者名查找
密码
图书管理界面
图书查找
图书删除
图书排序
按编号排序
系统模块图
其中:
图书馆管理界面以上为密码保护登陆模块,该模块完成对用户身份的识别(会员/非会员)并针对不同用户做出不同的反应;
图书信息添加模块完成图书基本信息的输入功能,输入图书信息包括图书编号、图书的户名,作者名、出版社、出版日期等信息
图书信息查找模块完成对已录入的图书信息的显示;
图书信息查询模块完成图书基本信息的查询,查询时对应有按图书书名查询和按图书作者名查询两种方式;
图书信息删除模块完成图书信息按照图书编号删除的功能;
图书馆菜单选择模块完成用户命令的接收,此模块也是图书信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;
2.数据结构
本系统中主要的数据结构就是图书的基本信息,包括图书编号、图书的书名,作者名、出版社、出版日期等信息,在处理过程中各项可以作为一本图书的不同属性来进行处理
3.程序流程
系统的执行应从密码登录保护开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及处理。
系统的流程图如下:
删除
信息输入
信息删除
信息排序
查询方式
按书名
按作者
结束
开始
否
菜单选择
输入
查询
排序
密码输入
密码输入
密码输入
否
是
是
否
系统流程图
3.详细设计
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下:
(1)密码保护登陆模块:
打开文件登录界面
if密码正确;
{进入图书馆管理菜单界面;
else再次输入密码
while(密码再次输入正确)
进入图书馆管理菜单界面
else重复第三次输入
while(密码输入正确)
进入图书馆管理菜单界面
else直接跳出程序}
(2)图书信息添加模块:
打开图书信息添加界面;
while( 请输入相关信息)
{
读入图书相关信息;
将读入的图书信息添加到以数组形是保存的文件中;
提示是否继续输入;
继续输入返回上层;
else
选择退出;
}
关闭图书信息添加界面,返回主菜单;
(3)图书信息查找模块:
打开图书信息查找界面
while(选择需要查找的方式);
{
if选择按图书名查找;
{
do输入图书名;
if图书信息存在;
显示图书书名对应的图书全部信息;
else
显示该书信息不存在或无法找到;
}
else选择按图书作者名查找;
{do输入图书作者名;
if图书信息存在;
显示图书书名对应的图书全部信息;
else
显示该书信息不存在或无法找到;
}
}
关闭图书信息查找界面,返回主菜单
(4)图书信息删除模块:
打开图书信息删除界面
{
while(输入你要删除的图书编号);
是否继续?
if
继续删除,返回上层输入图书编号删除信息;
else
选择退出图书信息删除界面;
}
关闭图书信息删除界面,返回主菜单
(5)图书书目排序模块:
选择打开图书排序界面
while
{if
选择以图书编号排序;
选择,显示排序以编号从大到小排序;
else
选择退出排序选择界面;
}
关闭图书信息排序界面,返回主菜单
(6)菜单管理模块
给出信息提示;
绘制菜单(包含图书信息添加、图书信息查找、图书信息删除、图书排序、主菜单退出选项);
提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
数据结构:
图书信息:
typedefstruct
{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
}
图书编号:
library.book[library.count].number
图书书名:
library.book[library.count].name
图书作者名:
library.book[library.count].author
图书出版社:
library.book[library.count].publish
图书出版日期:
library.book[library.count].time
4.C语言程序设计源程序清单
#include
#include
#include
#include
typedefstruct
{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
}mbook;
typedefstruct
{
intcount;//书的本数
mbookbook[100];//最大可有100本书
}mlibrary;
mlibrarylibrary;
voidsave()//保存图书信息。
{
FILE*fp;
if((fp=fopen("D:
\\library.txt","a"))==NULL)
{
printf("\n不能保存图书信息\n");
return;
}
fwrite(library.book,sizeof(library.book[0]),library.count,fp);
fclose(fp);
}
voidputin()/*定义添加函数*/
{
inty=1;
system("cls");
while(y)
{
printf("\t请输入您的书籍的书号:
");
scanf("%s",library.book[library.count].number);
printf("\t请输入书名:
");
scanf("%s",library.book[library.count].name);
printf("\t请输入作者名:
");
scanf("%s",library.book[library.count].author);
printf("\t请输入出版社:
");
scanf("%s",library.book[library.count].publish);
printf("\t请输入出版时间:
");
scanf("%s",library.book[library.count].time);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
voidsearch_by_name()/*定义按书名查找*/
{
chars2[20];
inti=0,a=1;
printf("\n请输入要查找的书名:
");
fflush(stdin);
scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(;iif(strcmp(s2,library.book[i].name)==0)
{
a=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(a)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch_by_author()/*定义按作者名查找*/
{
chars3[20];
inti=0,a=1;
printf("请输入要查询的书的作者:
");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(;iif(strcmp(s3,library.book[i].author)==0)
{a=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(a)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch()/*定义查找函数*/
{
inta;
system("cls");/*进行清屏*/
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------search_by_name\n");
printf("\t\t\t2---------------search_by_writer\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n");
printf("\t\t请选择你想要的查找方式:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
search_by_name();
break;
case2:
search_by_author();
break;
case0:
return;
}
}
voiddel()/*定义删除函数*/
{
inti;
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)break;
}
if(i!
=library.count)
{
for(;i{
strcpy(library.book[i].name,library.book[i+1].name);
strcpy(library.book[i].number,library.book[i+1].number);
strcpy(library.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
}
library.count--;
}
else
printf("\ncannotfound!
\n");
save();
fflush(stdin);
getchar();
}
voidarrange(chara[],charb[])
{
charc[20];
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
}
voidsort_by_number()
{
inti,j;
i=0;
j=0;
for(i=0;i{
for(j=0;j{
if(strcmp(library.book[j+1].number,library.book[j].number)>0)
{
arrange(library.book[j+1].number,library.book[j].number);
arrange(library.book[j+1].name,library.book[j].name);
arrange(library.book[j+1].author,library.book[j].author);
arrange(library.book[j+1].publish,library.book[j].publish);
arrange(library.book[j+1].time,library.book[j].time);
}
}
}
save();
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iprintf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
fflush(stdin);
getchar();
}
voidsortlist()
{
inta;
system("cls");/*进行清屏*/
printf("\t\t******************************\n");
printf("开始排序\n");
printf("\t\t\t1---------------sort_by_number\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n");
printf("\t\t请选择你想要的查找方式:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
sort_by_number();
break;
case0:
return;
default:
printf("序号错误");
break;
}
}
voidfun()
{
charmima[6]={"11046"},b[5];
inti,floag=0,num=0;
printf("请输入五位密码:
");
do
{
for(i=0;;i++)
{b[i]=getch();
if(b[i]=='\010')
i-=2;
if(b[i]!
='\015')
printf("*");
else
{
b[i]='\0';
if(strcmp(b,mima)==0)
{
printf("\n欢迎进入系统!
\n");
floag=1;
break;
}
else
{
if(num>=2)
exit(0);
printf("密码错误请重新输入:
");
num++;
break;
}
}
}
}
while(floag==0&&num<3);
}
voidmain()
{
inta;
fun();
do
{
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1------------------图书信息添加\n");
printf("\t\t\t2------------------图书信息查找\n");
printf("\t\t\t3------------------图书信息删除\n");
printf("\t\t\t4------------------图书信息排序\n");
printf("\t\t\t0------------------退出图书信息系统\n");
printf("\t\t*********************************************\n");
printf("\t\tPleaseEnterChoose:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
putin();
break;
case2:
search();
break;
case3:
del();
break;
case4:
sortlist();
break;
case0:
printf("\n\n退出\n\n");
break;
default:
printf("\n序号错误\n");
}
}while(a!
=0);
save();
}
5.测试与调试
问题一、图书信息初始添加模块:
图书信息包括图书编号、图书的书名,作者名、出版社、出版日期等信息,该模块以建立的动态指针为基础,来实现操作。
当点击进入或会按照提示输入相关信息,当未按照格式输入相关信息时出现输出错误。
解决方案:
(1)查找是否存在图书编号、图书的书名,作者名、出版社、出版日期等信息在输入过程中超出了程序本身定义的位数。
若如此,那么找到相关源程序更改源程序设定的限定位数。
(2)查找是否存在图书编号、图书的书名,作者名、出版社、出版日期等信息再输入过程中是否格式与相关格式不符。
若如此,查找所输入信息输入错误原因,按照源程序设定格式输入相关信息即可。
问题二、图书排序模块:
图书信息排序基于“冒泡法”对图书编号进行从大到小进行排序,在进行排序过程中,正确操作后却发现排序为乱码。
解决方案:
(1)查找是否为源程序发生错误,如果是源程序发生错误就修改源程序,并按照原始设定正确操作,进行相关操作。
(2)检查输入信息时是否有误,如:
图书编号相同的情况,如有类似情况删除信息后重新输入,然后进行排序。
(3)检查用于排序的循环结构是否有误。
问题三、图书信息查找模块
在输入相关图书编号之后发现无法显示相关图书与其信息
解决方案:
(1)查找是否为源程序发生错误,如果是源程序发生错误就修改源程序,并按照原始设定正确操作,进行相关操作。
(2)检查是否为我们在需要查找时输入的序号有错误,或者是在输入信息是该书号对应的书籍本数不唯一甚至更多。
6.各模块程序及执行结果
密码输入:
密码输入错误第一次:
主菜单界面;
图书信息添加界面:
选择图书查询方式界面:
选择图书排序界面:
图书排序结果显示界面:
选择删除界面:
7.心得体会与组内评价
心得体会:
这次课程设计让我们掌握了许多有用的知识。
首先通过不断地学习和锻炼更加熟练地掌握应用软件MicrosoftVisualC++6.0了。
设计正确及合适的程序对于我们初学者来说是很大的难题,出现一点儿错误就得费很大的努力去修改,正是这一步步一点点的努力让我们对C语言有了更深的认识。
同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值。
在设计中,每个同学都会遇到一些困难,或多或少,这些困难常常让我心情烦躁,比如不能清晰的建立设计模块,不会修改出现的错误等等,然后我向同学寻求帮助,向他们学习,最终通过自己努力建立了模块。
程序中肯定还存在着某些不可避免的问题,我们希望在以后的学习和应用中不断提高自己的能力,攻克遇到的困难。
组内评价:
参考文献
《C程序设计(第二版)》谭浩强清华大学出版社
《C语言程序设计》田祥松西安电子科技大学出版社
《C语言课程设计》黄明等电子工