您现在的位置:首页 > >

中南民族大学信管c语言课程方案设计书图书信息管理系统


中南民族大学管理学院

学生课程设计报告
课程名称: C 程序设计语言 选题名称: 图书信息管理系统 年 专 学 姓 级: 2011

业:信息管理与信息系统 号: 名:新浪微博 @song-style 是坏学长

指导教师: 完成地点:管理学院综合实验室 完成日期: 2012 年 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 :把所要的数据 charshuming[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 值

查 询 模 块

输入 i 值
判断 n 的值 判断 n 的值

按 书 名 删 除 信 息

按 作 者 名

按 书 名

按 作 者 名

判断 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: case 2: case 3: case 4: case 5: case 6: }

input()。break。 output()。break。 search()。break。 xiugai()。break。 shanchu()。break。 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(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf("

* ***** *********** *************** ******************** ** 1.图书信息录入 ** ** 2.图书信息浏览 ** ** 3.图书查询 ** ** 4.图书信息修改 **

*\n")。 **\n")。 ***\n")。 ****\n")。 *****\n")。 *\n")。 *\n")。 *\n")。 *\n")。 *\n")。

printf(" ** 5.图书信息删除 ** printf(" ** 6.退出 ** printf(" ******************** 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()。

*\n")。 *\n")。 *\n")。

} 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 返回界面 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")。

\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

端正的学习态度及认真刻苦程度等 总分

指导教师: 年月日



热文推荐
友情链接: 团党工作范文 工作范文 表格模版 社科文档网 营销文档资料 工程文档大全