资源描述
目 录
一、设计任务书…………………………………………………………3
二、本组课题及本人任务………………………………………………3
三、程序功效介绍………………………………………………………4
四、主体内容……………………………………………………………4
1.设计分析………………………………………………………………………4
2.程序结构………………………………………………………………………5
3.各模块功效及程序说明……………………………………………………5
4. 源程序………………………………………………………………………6
5.操作方法…………………………………………………………………….17
6.试验结果……………………………………………………………………18
7.设计体会……………………………………………………………………22
五、附录………………………………………………………………23
1.步骤图………………………………………………………………………23
2.过程列表……………………………………………………………………26
一、设计任务书
1.目标
1)复习、巩固C语言基础知识,深入加深对C语言了解和掌握。
2)课程设计为学生提供了一个既动手又动脑,独立实践机会,将书本上理论知识和实际有机结合起来,锻炼学生分析处理实际问题能力。提升学生适应实际,实践编程能力。
3)培养学生在项目开发中团体合作精神、创新意识及能力。
2.要求:
1)对系统进行功效模块分析、控制模块分析正确,符合课题要求,实现对应功效;能够加以其它功效或修饰,使程序愈加完善、合理。
2)系统设计要实用,编程简练,可用,功效全方面。
3)说明书、步骤图要清楚。
4)统计设计情况(备查,也为编写设计说明书作好准备)。
5)要求采取模块化程序设计方法,及锯齿型书写格式,要求上机调试经过和按设计汇报格式。
6)设计上交内容:设计汇报一份(按格式书写);源程序一份,能编译成可实施文件并能正常运行。
二、本组课题及本人任务
课题:图书信息管理系统设计
图书信息包含:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功效:
1.系统以菜单方法工作。
2.图书信息录入功效(图书信息用文件保留)--输入。
3.图书信息浏览功效--输出。
4.查询和排序功效:(最少一个查询方法)--算法。
a. 按书名查。
b.按作者名查询。
本人任务:负责设计和编写图书信息管理系统修改图书信息部分。
三、程序功效介绍
本系统是以visual C++ 6.0 环境下用C语言开发一个图书管理系统。本系统含有图书信息录入、浏览、删除、修改、查找(包含按书名、作者查找)功效。其中图书信息包含登录号、书名、作者名、分类号、出版单位、出版时间、价格,而且对信息以文件形式储存。另外本系统含有实用性同时代码逻辑谨慎清楚易懂,且界面美观。
四、主体内容
1.设计分析
本系统共分为一个主页面模块(主函数部分),五个功效模块(功效函数)分别为图书信息录入、图书信息浏览、图书信息查询、图书信息删除、图书信息修改。设计时应该先写好主函数、定义好全局变量和功效函数,再对五个功效函数进行设计。在每个功效函数和主函数应中加入控制条件使用户能够随时退出系统,并在用户输入指令错误时候给提醒和退出选项。小组中五个人分别负担一个功效模块进行设计。并在每个人设计完成后经过主函数进行链接调试正确后方为完成。
2.程序结构(步骤图)
系统运行
选择功效
1.信息录入
键入信息
2.信息浏览
返回主菜单
返回主菜单
3.信息查询
按书名查找
按作者查找
返回主菜单
输入书名
输入作者
信息存在?
是
否
输出信息
返回主菜单
4.信息删除
输入删出信息代号
输出删除后信息
返回主菜单
5.信息修改
输入修改信息代号
修改信息存在?
是
信息修改
否
返回主菜单
输出修改后信息
6.退出系统
3.各模块功效及程序说明
A、录入模块:本模块关键实施信息录入功效。
B、浏览模块:本模块关键是实施把已经有信息输出浏览功效。
C、查询模块:本模块关键是实施按书名和按作者名查找图书信息功效。
D、删除模块:本模块关键实施删除图书信息功效。
E、修改模块(本人设计模块):本模块关键实施图书信息修改功效。在用户选择该功效后。首先,系统会弹出已存在信息列表并让用户选择所要修改信息项目。然后,当用户选定要修改信息后会弹出信息目录,用户需按次序依次修改信息内容。最好当全部信息项目全部修改完成以后,按回车键会在窗口上输出修改后内容。
4. 源程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
struct Student
{
int num;/*登录号*/
char name[100];/*书名*/
char author[100];/*作者名*/
char fn[100];/*分类号*/
char place[100];/*出版单位*/
char day[100];/*出版时间*/
float money;/*价格*/
}stu[MAX];
main()/*主函数*/
{
void Input();/*输入*/
void Display();/*输出*/
void Find();/*查找*/
void Modify();/*删除*/
void Change();/*修改*/
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 欢迎来到图书信息管理系统 ※\n");
printf("※ ※\n");
printf("※ ※\n");
printf("※ 主菜单 ※\n");
printf("※ ※\n");
printf("※ ▲1.图书信息录入 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲2.图书信息浏览 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲3.图书信息查询 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲4.图书信息删除 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲5.图书信息修改 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲6.退出系统 ▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("请输入选择项(1-6):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<7)
{
switch(n)
{
case 1:Input();break;
case 2:Display();break;
case 3:Find();break;
case 4:Modify();break;
case 5:Change();break;
case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 谢谢使用! ※\n");
printf("※ 再见! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 输入错误! ※\n");
printf("※ 请退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
void Find()/*查找*/
{
FILE *fp;
int i;
int choose,t;
char ans[100];
do
{
printf("1.按书名查找\n");
printf("2.按作者名查找\n");
printf("返回主菜单(其它数字)\n");
scanf("%d",&choose);
if(choose==1)
{
printf("输入所查书名:\n");
scanf("%s",ans);
t=-1;
if(choose==1)
{
for(i=0;i<MAX;i++) if(strcmp(ans,stu[i].name)==0)
{
t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在该信息\n");
}
else if(choose==2)
{
printf("输入所查作者名:\n");
scanf("%s",ans);
t=-1;
if(choose==2)
{
for(i=0;i<MAX;i++)
if(strcmp(ans,stu[i].author)==0)
{ t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在该信息\n");
}
else return;
}while(1);
}
void Display()/*输出*/
{
FILE *fp;
int i;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
}
void Input()/*输入*/
{
FILE *fp;
int n;
fp=fopen("student","ab+");
for(n=0;n<MAX;n++)
{
printf("n=%d 输入序号n(当输入n=-1时,返回),n=",n++);
scanf("%d",&n);
if(n==-1)
{
fclose(fp);
return;
}
else
{
printf("请输入登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[n],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
void Modify()/*删除*/
{
FILE *fp;
int i,flag,n,s,j;
fp=fopen("student","rb+");
rewind(fp);
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
n=i;
printf("输入待删除图书号:\n");
scanf("%d",&s);
for(i=0,flag=1;flag&&i<n;i++)
{
if(s==stu[i].num)
{
for(j=i;j<n-1;j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].author,stu[j+1].author);
strcpy(stu[j].fn,stu[j+1].fn);
strcpy(stu[j].place,stu[j+1].place);
strcpy(stu[j].day,stu[j+1].day);
stu[j].money=stu[j+1].money;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("没有此号\n");
fp=fopen("student","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","r");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fread(&stu[i],sizeof(struct Student),1,fp);
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
fclose(fp);
}
void Change()/*修改*/
{
FILE *fp;
int i,num,n;
int flag=0;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
printf("请输入要修改图书号:");
scanf("%d",&num);
for(i=0;i<=MAX;i++)
if(stu[i].num==num)
{
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("-----------------------------------------------------------\n\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("student","rb+");
fseek(fp,n*sizeof(struct Student),0);
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","rb");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;
}
printf("-----------------------------------------------------------\n\n");
fclose(fp);
}
5.操作方法(步骤)
第一步:双击打包好.exe程序,打开程序。
第二步:依据窗口提醒内容作出选择。
第三步:依据弹出二级菜单作出选择。
第四步:依据所选内容进行对应操作。
第五步:操作完成,依据提醒返回主菜单会直接退出该系统。
6.试验结果
A、图书信息录入:
数据输入:
数据输出:
B、图书信息浏览
输入数据:
数据输出:
C、图书信息查询
输入数据:
输出数据:
D、图书信息删除:
输入数据:
输出数据:
E、图书信息修改
输入数据:
输出数据:
F、系统退出
输入数据:
数据输出:
7.设计体会。
在这一周程序设计实习当中并不是一帆风顺。刚开始到电脑面前听完老师讲了一大堆,我根本就不知道要做什么,用什么做。
我并没有被眼前一点小困难所击倒,我相信困难总是有措施处理。于是开始两天我就在网上找多种相关文章、视频。刚开始我就只是看着网上东西照猫画虎做部分小程序,慢慢经过这些模拟我也逐步懂了部分东西。经过两天原始知识积累后,我开始尝试着根据自己想法做了部分小系统。起初会出现很多问题,不是这儿少了就是那错了。在这么那样错误中我明白编程是一件很严谨事,容不得半点错误,一步走错,全盘皆输!在出现错误时我通常是上网搜索相关答案,听听大家想法,往往一个问题处理方法是多个多样,各自有其精妙之处。有处理方法浅显易懂,不过易出现漏洞;有复杂难懂,不过逻辑紧密,无丝毫破绽。编程是一门逻辑游戏,一但了解其游戏规则,便发觉乐趣无穷。有时候自己有很多想法,但因为自己水平有限不能很好地实现,每到那时候我就有一个强烈愿望想要把问题处理,做出自己想东西。一但处理了问题,那种愉快非亲身经历者不能感受!
说实话,在网上即使信息很多,不过会让人晕了头脑,做起来也不是那么轻易。可能我程序比起她人来说可能会有些许不足,不过那个个代码全部是出自我手,每一寸屏幕全部是我自己想法,全部是我自己。我认为不成功没关系,关键是要有自己努力成功心,而要成功光是剽窃她人是不行,得拿出自己东西,自己创新,要勇于尝试!
王杰 .7.9
七、附录
1.步骤图
主页面:
信息录入:
信息浏览:
信息查询:
信息删除:
信息修改:
系统退出:
2.关键过程列表
A、程序开头定义:
#include<stdio.h>:#include是编译预处理指令,就是在编译前将stdio.h这个文件里函数全部添加到你写cpp文件中。
#include<string.h>:在编译前C语言里面相关字符数组函数定义头文件,就是在编译前将stdio.h这个文件里函数全部添加到你写cpp文件中。
#include<stdlib.h>:在编译前将stdlib.h这个文件里函数全部添加到你写cpp文件中。
#include<conio.h>:在编译前将conio.h这个文件里函数全部添加到你写cpp文件中。
#define MAX 100:#define 就是在编译器编译之前对代码进行字符串替换,即是把MAX换成100.
B、struct Student:
结构体,定义结构体是整个程序共用体,即是该结构体可在每个模块中不从新定义就使用。
C、main()主函数模块关键变量、函数:
void Input():自定义输入函数。
void Display():自定义输出函数。
void Find():自定义查找函数。
void Modify():自定义删除函数。
void Change():自定义修改函数。
for():循环函数。
switch():选择函数,判定用户输入数字进行功效选择。
exit():退出循环函数。
D、void Input()输入模块关键变量、函数:
FILE *fp:申明fp是指针,用来指向FILE类型对象。
fopen(): fopen函数用来打开一个文件。
printf():输出函数,以程序员要求数据类型把数据输出到窗口上。
scanf():输入函数,以程序员要求数据类型输入数据。
if()…else:条件判定函数。
fclose():关闭文件函数,功效为关闭打开文件,以预防数据丢失。
fwrite():向文件写入一个数据块。
sizeof():以字节形式给出了其操作数存放大小。
for():循环函数。
E、void Display()输出函数关键变量、函数:
FILE *fp:申明fp是指针,用来指向FILE类型对象。
fread():在文件中读出一个数据块赋值给某一个变量
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件函数,功效为关闭打开文件,以预防数据丢失。
printf():输出函数,以程序员要求数据类型把数据输出到窗口上。
scanf():输入函数,以程序员要求数据类型输入数据。
if()…else:条件判定函数。
for():循环函数。
F、void Find()查找函数关键变量和函数:
FILE *fp:申明fp是指针,用来指向FILE类型对象。
char ans[100]:一个定义为字符型有100个元素数组。
strcmp(,):比较函数。比较逗号两边值是否一样,假如一样返回值为0,不然为1 。
do….while:循环函数,当函数返回值为1时退出循环,不然继续循环。
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件函数,功效为关闭打开文件,以预防数据丢失。
if()…else:条件判定函数。
for():循环函数。
printf():输出函数,以程序员要求数据类型把数据输出到窗口上。
scanf():输入函数,以程序员要求数据类型输入数据。
G、void Modify()删除函数关键变量和函数:
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件函数,功效为关闭打开文件,以预防数据丢失。
rewind():将文件指针重新指向一个流开头。
if()…else:条件判定函数。
for():循环函数。
printf():输出函数,以程序员要求数据类型把数据输出到窗口上。
scanf():输入函数,以程序员要求数据类型输入数据。
sizeof():以字节形式给出了其操作数存放大小。
H、void Change()修改函数关键变量和函数:
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件函数,功效为关闭打开文件,以预防数据丢失。
fseek(): 重定位流(数据流/文件)上文件内部位置指针。
fwrite():向文件写入一个数据块。
if()…else:条件判定函数。
for():循环函数。
printf():输出函数,以程序员要求数据类型把数据输出到窗口上。
scanf():输入函数,以程序员要求数据类型输入数据。
sizeof():以字节形式给出了其操作数存放大小。
展开阅读全文