资源描述
中南民族大学管理学院
学生课程设计汇报
课程名称: C程序设计语言
选题名称: 图书信息管理系统
年 级:
专 业:信息管理和信息系统
学 号:
姓 名:新浪微博 @song-style是坏学长
指导老师:
完成地点:管理学院综合试验室
完成日期: 12月
20 12 年至20 13 年度第 1 学期
新浪微博 @song-style是坏学长
一、题目(问题)描述
1、系统以菜单方法工作。
2、图书信息录入功效(图书信息用文件保留)--输入。
3、图书信息浏览功效--输出,查询 。
4、查询和排序功效:(最少一个查询方法)--算法。
按书名查找
按作者查询等。
5、图书信息删除和修改。
创新要求:
在基础要求达成后,可进行创新设计,如实现会员资料查询、会员注销,
为借书人办理注册。
办理借书手续(非注册会员不能借书)。
办理还书手续等等。
信息描述:
图书信息包含:登录号、书名、图书编号、单价、作者名、分类号、出版单
位、出版时间、价格等。
借阅人信息包含:借书人姓名、性别、学号
二、问题分析
1、系统要求实现很多功效,所以遵照结构化程序设计思想来进行本系统设计—自顶向下、逐步细化,将系统设计任务分解出很多子功效模块进行设计。
2、程序将综合if语句及switch语句利用方法及嵌套应用方法,循环结构三种语句while、do-while.、for,和函数定义方法和调用方法等来进行编写。
三、系统设计
图书信息管理系统
1、程序总体结构
录入
浏览
修改
删除
查询
按分类号
按作者名
按书名
浏览书籍信息
添加书籍信息
按作者查询
按书名查询
按书名
按作者名
2.关键数据数据结构设计
struct BOOK :把所要数据
char shuming[999],zuozheming[999],fenleihao[999],danwei[999],shijian[999],jiage[999];
全放在一维数组中,以结构体形式表现出来。这是文件录入和读取关键,相当于做成一个文件,需要时候将里面数据读取或修改。
(1).录入模块:
录入图书信息并保留于文件中。
(2).浏览模块:
添加一个或多个图书信息,并将所添加图书信息保留,方便查找。
(3).删除模块:
对图书信息做删除处理。
(4).修改模块:void xiugai
依据需要对图书信息进行修改。
(5).查询模块:
对已建立图书信息进行查询,而且可依据需要选择按书名、作者或按分类号查询。
(6).菜单 :
帮助借阅者依据所需进行选择。
3.函数设计
函 数 名:菜单函数 void select()
函数功效:运行后显示主界面,经过输入来选择下一步操作。
参数说明:int n 用于判定使用者所要进入界面序号。
算法描述:依据使用者输入数字进行判定,并调用相对应函数。
函 数 名:登陆函数 void dl()
函数功效:该函数功效为辨识管理权限,只有正确输入登录号才能进入主界面。
参数说明:int n ,k=0,其中n用于识别登录号正确是否,k用于做一个循环。
算法描述:用户输入登录号存在n里,判定n值是否等于11056026,是,则调用菜单函数。否,则让用户重新输入,两次输错以后关闭程序。
函 数 名:录入函数 void input()
函数功效:进入该函数,开始依据提醒录入图书信息
参数说明: int i=0; 用于自加,方便更换储存输入信息位置。
Char a;接收用户输入字符。
算法描述: printf提醒信息,用户输入需要录入数据,输入Y则调用lr()。输入N则调用clect(),输入其它则调用shifou()。
函 数 名:浏览函数 void output()
函数功效:进入该函数,根据输入次序依次显示信息
参数说明:int i=0; 用于自加,以更换数据位置信息以输出。
char a, b用于接收用户输入字符。
算法描述:输出第一本书籍信息,i++。输入Y,则输出第二本书籍信息。输入N ,则调用slect().
函 数 名:查询函数 void search ()
函数功效:进入函数,选择不一样方法进行查询
参数说明:int i ;cha j,m[100],a; i用于做循环以搜索图书,j用于判定用户需要查询方法,m[100]用于存放用户输入搜索数据。
算法描述:依据用户输入字符进行判定,调用对应函数。
函 数 名:修改函数 void xiugai()
函数功效:进入该函数,开始依据提醒修改图书信息
参数说明:int i 用于做循环条件限制,以寻求要修改图书。
char j 用于用于判定用户需要修改方法并调用对应函数。
char m[100], 用于录入用户 新存入数据信息并保留。
char a; 依据用户输入字符,判定其是否需要继续修改信息,并调用对应函数。
算法描述:输入j值,判定修改方法:A按书名,则调用xiugai1,B按作者名调用xiugai2, C返回,调用slect()。然后用户输入需要修改书本信息,用循环寻求相同数据,printf需要修改图书信息,而且提醒用户输入对应信息。 最终,输入Y,则goto mulu,N 则goto xiugai2。
函 数 名:删除函数 void shanchu()
函数功效:进入该函数,开始依据提醒删除图书信息
参数说明:int i,p; 用于做循环。
char j, 用于用于判定用户需要删除方法并调用对应函数。
m[100] 用于给用户输入需要删除书籍信息。
a, 用于存放用户输入字符。
dd 用于存放用户输入字符。
算法描述:输入i值,判定删除方法:A按书名,则调用shanchu1,B按作者名调用shanchu2, C返回,调用slect()。然后用户输入需要删除书本信息,用循环寻求相同数据,printf需要删除图书信息,而且提醒用户输入对应信息。 最终,输入Y,则从i位置开始往后,全部book.数据往前移动一位,然后输入Y,则xiugai,输入N则调用slect()。
4.程序运行视图
(见下页)
开 始
输入n值
判定n值
删除模块
修改模块
录入
模块
浏览
模块
查询模块
输入i值
输入i值
判定n值
判定n值
输入i值
按书名
按作者名
按书名
按作者名
判定n值
输入新信息
按作者名
按书名
按分类号
删除信息
添加信息
四、难点及关键技术分析:程序设计难点及处理方法说明
难点:算法设计,只有设计出来了算法以后才能步步展开,才能有目标编写程序。所以必需要有一个好算法。
处理措施:算法设计用步骤图会很很直观,能够清楚显示各个框之间逻辑关系。步骤图包含表示对应操作框,带箭头步骤线,必需文字说明。
关键技术:删除书籍时,结构体中数据往前移动一位。
处理措施:使用strcpy()来把后面数据和前一位数据进行调换。还需要做一个循环。而且要注意是,因为数组是100位,所以假如删除书籍是最终两位话,是没有必需使用strcpy(),因为存有数据内存相对位置没有发生改变。
五、测试情况:系统运行、数据输入及输出结果截图
六、源程序清单:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct BOOK
{
char shuming[999],zuozheming[999],fenleihao[999],danwei[999],
shijian[999],jiage[999];
}books[999];
void main()
{
void select();
void dl();
dl();
printf("\n");
select();
}
void select()
{
system("cls");
void jm();
void input();
void output();
void search();
void xiugai();
void shanchu();
int n;
printf(" 图书管理功效界面 \n");
menu:
jm();
scanf("%d",&n);
getchar();
if(n==1||n==2||n==3||n==4||n==5||n==6)
{
switch(n)
{
case 1: input();break;
case 2: output();break;
case 3: search();break;
case 4: xiugai();break;
case 5: shanchu();break;
case 6: exit(0);break;
}
}
else
{
printf("输入错误,请重新输入!\n");
printf("输入你再次选择:\n");
printf("\n");
printf("\n");
printf("\n");
goto menu;
}
}
void dl()
{
int n;
int k=0;
zl:
system("cls");
printf("\n");
printf("\n");
printf("\n");
printf(" ********欢迎光临图书管理系统********\n");
printf("\n");
printf("\n");
printf("请输入你学号:");
scanf("%d",&n);
if(n==11056026)
select();
else
{
if(k<2)
{
printf("输入错误,请重新输入!\n");
printf("输入你再次选择:");
k++;
goto zl;
}
else
{
printf("登录失败\n");
exit(0);
}
}
}
void jm()
{
printf(" *\n");
printf(" * **\n");
printf(" ***** ***\n");
printf(" *********** ****\n");
printf(" *************** *****\n");
printf(" ******************** *\n");
printf(" ** 1.图书信息录入 ** *\n");
printf(" ** 2.图书信息浏览 ** *\n");
printf(" ** 3.图书查询 ** *\n");
printf(" ** 4.图书信息修改 ** *\n");
printf(" ** 5.图书信息删除 ** *\n");
printf(" ** 6.退出 ** *\n");
printf(" ******************** *\n");
printf("请输入序号:\n");
printf("\n");}
void input()
{
system("cls");
int i=0;
char a;
lr:
printf("%s","图书书名:");
scanf ("%s",books[i].shuming);
printf("%s","作者名:");
scanf ("%s",books[i].zuozheming);
printf("%s","分类号:");
scanf ("%s",books[i].fenleihao);
printf("%s","出版单位:");
scanf ("%s",books[i].danwei);
printf("%s","出版时间:");
scanf ("%s",books[i].shijian);
printf("%s","价格:");
scanf ("%s",books[i].jiage);
i++;
printf("\n");
printf("是否继续,输入Y/N:");
shifou:
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
select();
}
else if(a=='y'||a=='Y')
{
goto lr;
}
else
{
printf("输入错误,请重新输入");
goto shifou;
}
system("cls");
}
void output()
{
system("cls");
int i=0;
char a,b;
shuchu:
printf("图书书名:%s\n",books[i].shuming);
printf("作者名:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
i++;
printf("是否继续浏览下一本:Y/N? \n");
shifou:
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
select();
}
else if(a=='Y'||a=='y')
{
if(books[i+1].shuming!=0)
goto shuchu;
else
{
printf("查询完成,输入Y返回界面 \n");
scanf("%s",&b);
getchar();
system("cls");
if(b=='y'||b=='Y')
select();
}
}
else
{
printf("输入错误,请重新输入");
goto shifou;
}
system("cls");
}
void search()
{
system("cls");
int i;
char j,m[100],a;
mulu:
printf("请选择查询方法:\n");
printf("A、按书名查询\n");
printf("B、按作者名查询\n");
printf("C、按分类号查询\n");
printf("D、返回\n");
printf("请选择:");
scanf("%s",&j);
getchar();
system("cls");
if('A'==j||'a'==j)
{
chaxun1:
printf("请输入图书书名:");
scanf("%s",&m);
for(i=0;i<=999;i++)
{
if(strcmp(books[i].shuming,m)==0)
{
printf("书名:%s\n",books[i].shuming);
printf("作者:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
}
}
printf("是否继续,输入Y/N:");
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
goto mulu;
}
else
goto chaxun1;
}
else if('B'==j||'b'==j)
{
chaxun2:
printf("请输入作者名:");
scanf("%s",&m);
for(i=0;i<=999;i++)
{
if(strcmp(books[i].zuozheming,m)==0)
{
printf("图书书名:%s\n",books[i].shuming);
printf("作者名:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
}
}
printf("是否继续,输入Y/N:");
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
goto mulu;
}
else
goto chaxun2;
}
else if('C'==j||'c'==j)
{
chaxun3:
printf("请输入分类号:");
scanf("%s",&m);
for(i=0;i<=999;i++)
{
if(strcmp(books[i].fenleihao,m)==0)
{
printf("图书书名:%s\n",books[i].shuming);
printf("作者名:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
}
}
printf("是否继续,输入Y/N:");
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
goto mulu;
}
else
goto chaxun3;
}
else if('D'==j||'d'==j)
{
select();
}
else
{
printf("输入错误,请重新输入");
goto mulu;
}
system("cls");
}
void xiugai()
{
system("cls");
int i;
char j,m[100],a;
mulu:
printf("请选择修改方法:\n");
printf("A、按书名修改\n");
printf("B、按作者名修改\n");
printf("C、返回\n");
printf("请选择:");
scanf("%s",&j);
getchar();
if('A'==j||'a'==j)
{
system("cls");
xiugai1:
printf("请输入要修改图书书名:");
scanf("%s",&m);
for(i=0;i<=999;i++)
{
if(strcmp(books[i].shuming,m)==0)
{
printf("图书书名:%s\n",books[i].shuming);
printf("作者名:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
printf("请修改:");
printf("%s","图书书名:");
scanf("%s",books[i].shuming);
printf("%s","作者名:");
scanf("%s",books[i].zuozheming);
printf("%s","分类号:");
scanf("%s",books[i].fenleihao);
printf("%s","出版单位:");
scanf("%s",books[i].danwei);
printf("%s","出版时间:");
scanf("%s",books[i].shijian);
printf("%s","价格:");
scanf("%s",books[i].jiage);
printf("是否继续,输入Y/N:");
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
goto mulu;
}
else
goto xiugai1;
}
system("cls");
}
}
else if('B'==j||'b'==j)
{
xiugai2:
printf("请输入要修改作者名:");
scanf("%s",&m);
for(i=0;i<=999;i++)
{
if(strcmp(books[i].zuozheming,m)==0)
{
printf("图书书名:%s\n",books[i].shuming);
printf("作者名:%s\n",books[i].zuozheming);
printf("分类号:%s\n",books[i].fenleihao);
printf("出版单位:%s\n",books[i].danwei);
printf("出版时间:%s\n",books[i].shijian);
printf("价格:%s\n",books[i].jiage);
printf("请修改:");
printf("%s","图书书名:");
scanf("%s",books[i].shuming);
printf("%s","作者名:");
scanf("%s",books[i].zuozheming);
printf("%s","分类号:");
scanf("%s",books[i].fenleihao);
printf("%s","出版单位:");
scanf("%s",books[i].danwei);
printf("%s","出版时间:");
scanf("%s",books[i].shijian);
printf("%s","价格:");
scanf("%s",books[i].jiage);
printf("是否继续,输入Y/N:");
scanf("%s",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
goto mulu;
}
else
goto xiugai2;
}
system("cls");
}
}
else if('c'==j||'C'==j)
{
select();
}
else
{
printf("输入错误,请重新输入");
goto mulu;
}
}
void shanchu()
{
system("cls");
int i,p;
char j,m[100],a,dd;
printf("请选择删除方法:\n");
printf("A、按书名删除\n");
printf("B、按作者名删除\n");
printf("C、返回\n");
printf("请选择:");
scanf("%c",&j);
getchar();
system("cls");
if('A'==j||'a'==j)
{
shanchu1:
printf("请输入要删除图书书名:");
scanf("%s",m);
getchar();
for(i=0;i<=999;i++)
{
if(strcmp(books[i].shuming,m)==0)
{
printf("%s","作者名:");
printf("%s\n",books[i].zuozheming);
printf("%s","分类号:");
printf("%s\n",books[i].fenleihao);
printf("%s","出版单位:");
printf("%\ns",books[i].danwei);
printf("%s","出版时间:");
printf("%s\n",books[i].shijian);
printf("%s","价格:");
printf("%s\n",books[i].jiage);
printf("确定删除,输入Y/N:");
scanf("%c",&dd);
getchar();
if(dd=='y'||dd=='Y')
{
for(p=i;p<=997;p++)
{
strcpy(books[p].shuming,books[p+1].shuming);
strcpy(books[p].zuozheming,books[p+1].zuozheming);
strcpy(books[p].fenleihao,books[p+1].fenleihao);
strcpy(books[p].danwei,books[p+1].danwei);
strcpy(books[p].shijian,books[p+1].shijian);
strcpy(books[p].jiage,books[p+1].jiage);
}
}
else
{
printf("是否继续,输入Y/N:");
scanf("%c",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
shanchu();
else
goto shanchu1;
}
system("cls");
}
}
}
else if('B'==j||'b'==j)
{
shanchu2:
printf("请输入要删除作者名:");
scanf("%s",m);
getchar();
for(i=0;i<=999;i++)
{
if(strcmp(books[i].zuozheming,m)==0)
{
printf("%s","图书书名:");
printf("%s\n",books[i].shuming);
printf("%s","分类号:");
printf("%s\n",books[i].fenleihao);
printf("%s","出版单位:");
printf("%s\n",books[i].danwei);
printf("%s","出版时间:");
printf("%s\n",books[i].shijian);
printf("%s","价格:");
printf("%s\n",books[i].jiage);
printf("确定删除,输入Y/N:");
scanf("%c",&dd);
getchar();
if(dd=='y' || dd=='Y')
{
for(p=i;p<=997;p++)
{
strcpy(books[p].shuming,books[p+1].shuming); strcpy(books[p].zuozheming,books[p+1].zuozheming);
strcpy(books[p].fenleihao,books[p+1].fenleihao); strcpy(books[p].danwei,books[p+1].danwei);
strcpy(books[p].shijian,books[p+1].shijian);
strcpy(books[p].jiage,books[p+1].jiage);
}
}
else
{
printf("是否继续,输入Y/N:");
scanf("%c",&a);
getchar();
system("cls");
if(a=='n'||a=='N')
{
shanchu();
}
else
goto shanchu2;
}
system("cls");
shanchu();
}
}
}
else if('c'==j||'C'==j)
{
select();
}
else
{
printf("输入错误,请重新输入Y/N");
shanchu();
}
}
七、心得体会
2.关键数据数据结构设计:程序所用到关键数据结构说明及描述,如用到结构是怎样定义,起什么作用等。
3.函数设计:按以下格式列出所设计每个函数
/*每个函数书写格式为:
函数名:所在文件名
函数功效:
参数说明:
算法描述
四、难点及关键技术分析:程序设计难点及处理方法说明
五、测试情况:系统运行、数据输入及输出结果截图
七、心得体会
《C程序设计语言》课程设计量化评分标准
指标
最高分
评分要素
评分
设计技术水平
30
程序功效设计、数据结构设计及整体结构设计合理;程序运行情况良好,算法说明清楚,理论分析和计算正确,试验数据无误
实际动手能力
20
熟练使用开发工具,能够快速正确进行调试、纠错和运行
编程风格
10
良好编程风格(缩进,注释,变量名、函数名见名知意等,程序运行界面友好)
汇报规范化
10
提交电子文档及打印文档书写、存放符合规范化要求
回复问题
20
能简明扼要地叙述设计关键内容,能正确流利地回复多种问题
学习态度
10
端正学习态度及认真刻苦程度等
总
展开阅读全文