《C语言程序设计》课程设计报告图书信息管理系统Word文档下载推荐.docx
- 文档编号:17714300
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:25
- 大小:181.25KB
《C语言程序设计》课程设计报告图书信息管理系统Word文档下载推荐.docx
《《C语言程序设计》课程设计报告图书信息管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课程设计报告图书信息管理系统Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
主要提示的
菜单界面
删除
图书
信息
浏览
图书
查询
修改
插入
采用结构:
structtsxx{//定义结构
longdlnum;
//定义登录号
charbname[10];
//定义书名
charaname[10];
//定义作者名
charscnum[10];
//定义分类号
charplname[10];
//定义出版社名
chartime[11];
//定义录入时间
floatprice;
//定义价格
structtsxx*next;
//定义指向下一个结构的首地址
};
链表结构:
structtsxxB
structtsxxA
head
structtsxxDNULL
structtsxxC
各功能独立自定义的函数:
1、插入图书信息(按登录号从大到小排序):
structtsxx*zengjia(structtsxx*head)//传递链表的首地址,并返回链表的首地址
2.、浏览全部的图书信息:
voidPtrint_Stu_Doc(structtsxx*head)//传递链表的首地址
3、查询图书信息(包括书名查询和作者名查询):
voidCheck(structtsxx*head)//传递链表的首地址
4、删除图书信息:
structtsxx*Delete(structtsxx*head)//传递链表的首地址,并返回链表的首地址
5.、修改图书信息:
structtsxx*revise(structtsxx*head)//传递链表的首地址,并返回链表的首地址
其他一些变量的定义:
longsize;
//定义结构的大小
FILE*fp;
//定义文件指针,指向文件
structtsxx*head;
//定义链表的首地址
structtsxx*p;
//定义结构指针
charchoice;
//定义选择变量
四
详细设计
1、设计思路:
首先,输入一些图书信息,申请一个结构类型的动态内存,把图书信息赋值到动态内存内,每一快动态内存存放一本图书的信息,并形成一条链表,比较登录号的大小,按登录号从大到小排列;
然后,建立并打开一个文件,把链表中的数据写入文件中,然后关闭文件;
最后,插入功能:
先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你想要插入的图书信息,比较登录号的大小,然后把新的图书信息按照登录号的大小顺序插入链表里面,新建一个文间,把新的链表写入文件中;
浏览功能:
先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,然后链表头开始,把结构中的数据一个一个输出到界面上;
查询功能:
先把所有的数据从文件中读出来,申请动态内存来存放,形成链表;
选择你要查询的方式:
1是按书名查询,2是按作者名查询。
输入你的选择,判断你的查询方式。
书名查询:
输入你要查询的书名,在链表中查找你这本书,然后把这本书的信息输出到界面上;
作者名查询:
输入你要查询的作者名,在链表中查找对应作者名的图书的信息,并把信息输入到界面上;
修改功能:
先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你要修改的图书的登录号,在链表中查找对应登录号的图书信息的结构,重新输入你要修改的图书的全部信息,并把这些新的图书信息赋值给找到的结构,覆盖旧的图书信息,新建一个文件,存放新的图书信息;
删除功能:
先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入你要删除的图书的登录号,在链表中查找对应登录号的图书信息的结构与前一个结构,让前一个结构的next指向对应登录号结构的下一个结构,释放动态内存,新建一个新的文件,存放新的图示信息;
2、数据结构的选择:
据图书信息表特点,决定选用链表这种数据结构(也可用其它的数据结构)来作为组成成绩数据库的基本框架。
链表是最简单也是最常用的一种动态数据结构。
它是对动态获得的内存进行组织的一种结构。
选用链表有得好处:
1.即用即申请,不会造成内存空间的浪费;
2.是数据之间既有独立性,又便于数据的相互连系;
3.便于数据的添加及删除等优点。
3、设计思想的选择:
用模块化程序设计理念,对各个功能定义不同函数,分块处理,这样有利于后期调试及今后对功能的完善。
五
调试分析
1、把数据从文件中拿出来时,当文件是空的,它也会读数据,这时的数据时0;
当文件不空时,最后的数据会被读两次。
因此,这样读出来的文件就会出现一些小差错,必须做适当的调整。
当文件为空,把链表的首地址head赋值为NULL,然后释放动态内存;
当文件不为空时,把链表的最后第二个结构的next赋值为NULL,然后释放动态内存。
2、因为开始时定义choice为整型变量,所以只能输入整数,如果不小心输入字符数时,整个程序就出现错误,不能继续运行。
因此,我们把choice重新定义成字符型,这样就可以输入字符数,所以后面用switch时,也要改成字符型。
3、一开始运行程序是,因为还没有创建文件,所以在读取文件中的数据时,就会出现“不能打开文件”的错误。
因此,在一开始运行程序时必须要先创建一个文件,以后程序就会自动建立一个新的文件。
4、在作者名查询那里,一开始是当查找到一条对应的结构数据时,因为用了break,所以就直接退出了循环,因此如果一个作者有多本书是,以只能查询一本书的信息。
调试后,我们把break删掉,这样它就会一直循环,直到链表的最后一条数据,它才会跳出循环。
这样就能把一个作者全部的书都显示出来。
…………
六
测试结果
1、数据的输入:
新建一个文件,并把数据写入文件中:
增加功能:
七
用户使用说明
一开始运行程序时,就会出现一个让你选择的界面,1.是增加数据,2是查询数据,3是浏览数据,4是修改数据,5是删除数据,6是输入数据,并新建一个文本存这些数据,0是退出程序。
当你输入1时,界面就会输出“Enterthestatic(lognumbooknameauthornamescorenumpublishnametimeprice):
”,接着你就输入你要增加的图书的信息就可以了。
当你输入2时,就会在出现一个让你选择的界面,1是书名查询,2是作者名查询。
当你输入1时,如果文件时空的,界面就会输出“N0Records”,如果文件不是空的,界面就会输出“Inputbname:
”,就着你就输入你要查询的图书的书名,如果文件中没有你要查询的这本书,界面就会输出“Thereisn'
tthisstatic!
”,当文件中有你要查询的这本书时,界面就会输出这本书的全部信息。
当你输入2时,如果文件时空的,界面就会输出“N0Records”,如果文件不是空的,界面就会输出“Inputaname:
”,就着你就输入你要查询的图书的作者名,如果文件中没有你要查询的这本书,界面就会输出“Thereisn'
当你输入3时,界面就会输出全部图书的全部信息;
当你输入4时,界面就会输出“Inputthelognum:
”,接着你要输入你要修改的图书的登录号,如果文件时空的,界面就会输出“Notrecords!
”,如果文件不是空的,但没有你所输入的登录号的图书,界面就会输出“Thereisn'
”,如果文件不是空的,并且有你输入的登录号的图书,界面就会输出这本书的全部信息,很“Retypethestatic:
”,接着你重新输入这本书的全部信息就可以了。
当你输入4时,界面就会输出“Inputdlnum:
”,接着你就输入你要删除的图书的登录号就可以了。
当你输入6时,界面就会输出“Enterthestatic(lognumbooknameauthornamescorenumpublishnametimeprice):
当你输入0时,就退出程序
当你输入的是其他的数字或是字符时,界面就会输出“Entererror!
”。
八
课程设计总结
做为这个小组的组长,我觉得我们所设计的程序今本上已经能够实现题目的要求,并且运用的链表,还用文件来存数据。
但是,我觉得我们的程序还是存在着一些不足之处。
首先建立一个文件是文件名和拓展名都已经被规定好的,其次是当文件为空时,程序运行时,当你输入得选择不是6是,会发生错误,所以一开始要先运行选择6,后才能运行其他选择,最后是运行查询、修改、删除功能,你输入的信息要跟文件中的一致,才能实现,如果稍有不同,就不够实现这些功能了。
另外,我想感谢我的组员,因为我们是分工合作的,他们有的负责一个功能,有的负责两个功能,而我主要是些主函数,在他们的积极配合下,我们很快就把总程序写好,并调试完毕。
所以我想感谢他们的配合。
因为集体的力量是强大的,只有我们的积极合作,才能够准时的完成这个课程设计。
最后,我觉得在这个课程设计的过程中,我学到了很多东西。
第一是耐心,当你在调试程序中,看到了你设计的程序出现了那么多错误,或者当显示0错误0警告,却不能运行,或者是运行结果不是你所期望时,我觉得这时候最是考验耐心的时候,也只有耐心和永不言败的信念,才能支持你逆流而上,解决所有的困难。
在这个过程中,我试过用了几个钟的时间找一个错误,而结果只是打错了一个定义。
第二是沟通,因为我对C语言也比较熟了,有一些同学比较陌生,所以他们来问我,在我解答他们的问题是,我深刻的体会了沟通的重要性,因为只有你沟通的好,他们容易理解,你也不用浪费口舌去讲一些不必要的知识点……
程序参考代码:
/*...............................................主函数.................................................*/
#include<
stdio.h>
string.h>
stdlib.h>
structbookinf{//定义结构
intnum;
charbname[20];
charwname[10];
charclanum[14];
charpubcom[10];
charpubtime[10];
floatprice;
structbookinf*next;
structbookinf*vitil(void)//从文件中拿出数据
{
structbookinf*p1,*p2,*p3;
intnum;
charwname[10];
charclanum[14];
charpubcom[10];
charpubtime[10];
floatprice;
longi=0;
if((fp=fopen("
程序设计.txt"
"
r"
))==NULL)//打开文件
{
printf("
cannotopenfile程序设计.txt!
\n"
);
exit(0);
}
while(!
feof(fp))
if(feof(fp))break;
if(i>
=1)
p3=p1;
if((p1=(structbookinf*)calloc(1,size))==NULL)
{
printf("
Notabletoallocatememory.\n"
exit
(1);
}
fscanf(fp,"
%ld%s%s%s%s%s%f"
&
num,bname,wname,clanum,pubcom,pubtime,&
price);
p1->
num=num;
strcpy(p1->
bname,bname);
wname,wname);
clanum,clanum);
pubcom,pubcom);
pubtime,pubtime);
price=price;
if(i==0)
p2=p1;
else
p3->
next=p1;
i++;
if(p2->
next==p1)
p2->
next=NULL;
else
p3->
free(p1);
fclose(fp);
//关闭文件
returnp2;
}
voidinputchoice(void)
printf("
\nChoice:
1.Add\n"
2.Check\n"
3.Scan\n"
4.Revise\n"
5.Delect\n"
6.Enterthestactic\n"
0.Exit\n"
voidwrite_to_txt(structbookinf*head)//写入文件
structbookinf*p;
w"
))==NULL)
for(p=head;
p;
p=p->
next)
fprintf(fp,"
%ld%s%s%s%s%s%f\n"
p->
num,p->
bname,p->
wname,p->
clanum,p->
pubcom,p->
pubtime,p->
/*......................................................增加功能...............................................*/
structbookinf*Enter(structbookinf*head)//增加数据
structbookinf*p1,*p2,*p3;
charbname[20];
if((p1=(structbookinf*)calloc(1,size))==NULL)
exit
(1);
Enterthestatic(lognumbooknameauthornamescorenumpublishnametimeprice):
scanf("
p1->
strcpy(p1->
p2=head;
if(head==NULL)
head=p1;
head->
while((p1->
num>
p2->
num)&
&
(p2->
next!
=NULL))
p3=p2;
p2=p2->
next;
if(p1->
num<
=p2->
num)
if(head==p2)
head=p1;
else
p3->
p1->
next=p2;
p2->
returnhead;
/*....................................................查询功能...................................................*/
voidCheck(structbookinf*head)//查询,书名,作者名
structbookinf*ptr;
chara;
charwname[10];
1:
bname\n2:
aname\n"
%s"
a);
if(head==NULL)
\nN0Records\n"
else//链表非空
switch(a)
case'
1'
:
//按书名查询
printf("
Inputbname:
"
scanf("
bname);
for(ptr=head;
ptr;
ptr=ptr->
{
if(strcmp(ptr->
bname,bname)==0)
{
printf("
dlnumbnameanamescnumplnametimeprice\n"
%5ld%10s%10s%10s%10s%10s%8f\n"
ptr->
num,ptr->
bname,ptr->
wname,
ptr->
clanum,ptr->
pubcom,ptr->
pubtime,ptr->
if(ptr==NULL)
Thereisn'
}
}
break;
2'
//按作者名查询
Inputwname:
wname);
wname,wname)==0)
numbnamewnameclanumpubcompubtimeprice\n"
%3ld%3s%3s%3s%3s%3s%3f\n"
printf("
default:
Entererror!
}
/*..................................................浏览功能..............................................*/
voidPtrint_Stu_Doc(structbookinf*head)//浏览
\nNoRecords\n"
\nTheBooksInformationAre:
\n"
dlnumbnameanamescnumplnametimeprice\n"
ptr=head;
while(ptr!
=NULL)
%ld%s%s%s%s%s%6.3f\n"
wname,ptr->
ptr=ptr->
/*.................................................修改功能.........................................................*/
stru
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课程设计 报告 图书 信息管理 系统