资源描述
程序设计课程设计
《程序设计基础(C)》课程设计报告
图书信息管理系统
学生姓名
学 号
班 级
指导教师
日 期
Xxx学院
18
目录
目录 1
前言- 摘要 2
第一章、C语言课程设计的目的 3
第二章、总体设计(程序设计组成框图、流程图) 3
(一)、系统功能分析 3
1、设计图书信息管理系统,使之能提供以下功能: 3
2、查询方式 3
(二)、程序设计组成框图、流程图 4
1、本程序的最大框架设计 4
2、本程序的次级框架设计 5
第三章、详细设计思路 6
一、函数功能、入口及出口参数说明,函数调用关系描述 6
第四章、调试与测试 8
一、使用软件: 8
1、Visual c++ 6.0 8
2、超级屏捕专业版(试用版) 8
二、调试结果 8
系统主界面 8
功能菜单 9
图书信息录入菜单 9
图书查询菜单 10
第五章、源程序代码及调试结果详细表单 10
第六章、心得体会 17
参考文献 17
前言- 摘要
二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们广泛的关注。如何获取信息?图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来。迫使人们起用新的管理方法来管理图书,如何把图书管理员从繁重的工作中解脱出来呢?
本设计主要研究的是用C语言开发图书馆管理功能,其具体体现在图书的检索、查询、录入功能,更要优化了图书馆管理系统设计。
管理信息系统的设计与开发是一项系统工程,为了保证系统的质量,设计人员必须遵守共同的设计原则,尽可能地提高系统的各项指标。具体的设计原则如下:
⑴实用性原则
要力求最大限度地满足实际工作的需要,必要的考虑各业务层次、各管理环节数据处理的实用性,把满足用户生产和管理业务作为第一要素进行考虑。用户接口和操作界面设计则不必进行过多涉及,只要求在dos环境下的简单操作即可。
⑵可扩展性与可维护性原则
为适应将来的发展,该系统应具有良好的可扩展性和可维护性。软件设计尽可能模块化、组件化,使应用系统可灵活配置,适应不同的情况。
⑶安全可靠性原则
应用软件与数据库系统的设计要做到安全可靠,防止非法用户的入侵。数据库的备份策略恰当,以防止灾难性事故发生,这个由于目前水平有限,难以实施进行,所以作略。
⑷用户界面设计原则
不必设计,只要在dos环境下运行即可。
⑸数据库设计原则:做到一致性和有效性即可。
第一章、C语言课程设计的目的
1、课程设计是对学生进行实践操作训练的重要环节,通过课程设计加深对本课程基本知识的理解和提高本课程基本知识的应用能力。
2、掌握本课程工程设计的主要内容、步骤和方法。
3、提高操作能力,学会应用有关资料进行程序设计的方法。
4、提高独立分析问题、解决问题的能力,逐步增强设计训练。
5、学生要认真读教材,阅读有关规范、设计手册等资料,独立按时完成任务。
6、掌握程序设计逻辑与设计报告单的格式书写。
第二章、总体设计(程序设计组成框图、流程图)
(一)、系统功能分析
1、设计图书信息管理系统,使之能提供以下功能:
A、图书信息录入功能(图书信息用文件保存)--输入
B、图书信息浏览功能--输出
C、图书信息查询功能--算法
2、查询方式
A、按书名查询
B、按作者名查询
图书馆管理系统的管理远权限分为3级:系统管理员、图书馆管理员和一般管理员。尽管他们具有不同模块的管理权限,但为简单起见,又因为图书馆管理系统的主要实体是书籍和图书,所以。不再仔细对管理员进行设计。
书籍参数具体包括书籍类型、书名、作者名、图书编号、出版单位、出版时间、价格七个方面的基本信息。
(二)、程序设计组成框图、流程图
1、本程序的最大框架设计
设计如下:
此乃计算机课程设计的要求
图书管理
系统
图书信息
录入
图书信息
浏览
图书信息
查询
按 书 名
查询
按作者名查询
管 理 员
录入
使 用 者
浏览
用文件
保存
(输入)
信息
输出
涉及算法的设计
2、本程序的次级框架设计
(1)、大体框架
用
户
界
面
用
户
录 入
查 询
浏 览
数
据
库
通过数据库工作
(2)、检索系统图书信息
查 找
书 目
读者
(3)、图书档案管理系统
录入
身份验证
管理员
修改
注销
入库清单
可以打印
图书清单
(4)、程序设计的部分流程图
图书查询模块流程
开始
提示输入图书编号、书名、作者
输入正确
查询
重新输入
否 是
是 否
否
退出系统
第三章、详细设计思路
一、函数功能、入口及出口参数说明,函数调用关系描述
1、# include <stdio.h>
提供与程序编写有关的函数信息,例如对输入输出函数的声明和宏的定义、全局量的定义等,是系统提供的文件名。
2、# include <stdlib.h>(网上摘录)
包含了库函数之后就可以使用很多应用运算,类型转换,程序环境处理等了,比如可以使用sin,cos.sqrt这些函数什么的
stdlib.h里面定义了五种类型、一些宏和通用工具函数。
类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;
宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;
常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
3、# include <string.h>
string是C标准库中声明的一个字符串类型,用来定义字符串变量。
4、结构体
比如struct Student
{
……
}
就是一个用户自己建立的结构体类型。所谓结构体就是,C语言允许用户建立又不同类型数据组成的组合型的数据结构。
注意:typedef声明新的类型来代替已有的类型的名字。
5、文件的打开fopen函数
用来打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);
其中,
“文件指针名”必须是被说明为FILE 类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和操作要求。
“文件名”是字符串常量或字符串数组
6、strcpy
把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间
7、C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
(1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。如数学函数即属于此类函数。由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
(2)无返回值函数
此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型的说明符为“void”。
8. C语言提供了极为丰富的库函数,这些库函数又可从功能角度作以下分类。
(1)字符类型分类函数(2)转换函数(3)目录路径函数(4)诊断函数(5)图形函数(6)输入输出函数(7)接口函数(8)字符串函数(9)内存管理函数(11)日期和时间函数(12)进程控制函数(13)其它函数
第四章、调试与测试
一、使用软件:
1、Visual c++ 6.0
2、超级屏捕专业版(试用版)
二、调试结果
系统主界面
功能菜单
图书信息录入菜单
图书查询菜单
第五章、源程序代码及调试结果详细表单
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100
struct book //图书信息基本情况
{
char num[13]; //图书编号
char name[20]; //图书名
char publish[100]; //出版社
float price; //图书单价
char status[100]; //图书状态
char author[100]; //作者
char time[100]; //出版时间
}em[N];
int b=0;
char password[7]="123456";
int pass();
void jiemian();
void input();
void display();
void search();
void main()
{
char key;
if(pass()==1)
{
jiemian();
do
{
printf("\t\t请选择操作类型:\n");
printf("***********\t\t***********\n");
printf("\t\t1 进入录入图书信息\n");
printf("\t\t2 进入输出图书信息\n");
printf("\t\t3 进入查询图书信息\n");
printf("\t\t4 进入保存图书信息\n");
printf("\t\t0 退出系统\n");
printf("***********\t\t***********\n");
key=getch();
switch(key)
{
case'0':
{
printf("谢谢您的使用\n再见!");
exit(0);
}
case'1':
input(); //输入图书信息
break;
case'2':
display(); //显示图书信息
break;
case'3':
search(); //查询图书信息
break;
default:
printf("输入有错误,请按操作要求进行操作");
}
}while(1);
}
}
int pass(void)//密码验证
{
char passwor[7];
int i,j=2;
printf("请输入客户登录密码(提示:六位数字):\n");
gets(passwor);
if(!strcmp(passwor,password))//若密码正确
{
for(i=1;i<=27;i++)
printf("*");
printf("\n");
printf("欢迎进入图书管理系统!\n");
return 1;
}
else//重新输入密码
{
do
{
j--;
printf("密码错误请重新输入:");
gets(password);
if(!strcmp(password,password))//若密码正确
{
for(i=1;i<=27;i++)
printf("*");
printf("\n");
printf("欢迎进入图书管理系统!");
return 1;
break;
}
else
continue;
}while(j>0);
printf("抱歉,你的输入次数已到");//只能输入规定的次数
return 0;
}
}
void
jiemian() //进入时的界面
{
int i;
for(i=1;i<=27;i++)
printf("%");//作者
printf("制作人:杜晓宁\t专业:电力工程\n");
printf("联系地址:兰州交通大学\n");
for(i=1;i<=27;i++)
printf("%");
}
void input()//输入图书信息
{
char ch;
printf("你现在的位置是:\n\t\t输入图书信息栏\n");
for(;b <=N; b++)//要输入的选项
{
printf("请输入图书号:\n"); //图书号
scanf("%s",em[b].num);
printf("请输入图书名:\n"); //图书名
scanf("%s",em[b].name);
printf("请输入作者名:\n"); //作者名
scanf("%s",em[b].author);
printf("请输入时间:\n"); //时间
scanf("%s",em[b].time);
printf("请输入图书状态:\n"); //图书状态
scanf("%s",em[b].status);
printf("请输入图书出版商:\n"); //出版商
scanf("%s",em[b].publish);
printf("按n键退出,其他键继续\n"); //是否继续输入图书信息
ch=getch();
if(ch=='N'||ch=='n')
{
break;
}
else
printf("你的位置是:\n\t\t输入图书信息栏 \n");
}
}
void display()//显示图书信息
{
int i,j;
printf("所有的图书信息如下:\n");
{
for(j=1;j<=80;j++)
printf("*");
printf("\t图书号\t图书名\t作者名\t时间\n");
printf("%-16s%-16s%-8s%s\n",em[i].num,em[i].name,em[i].author,em[i].time);
printf("图书状态\t\t出版商\t\t\n");
printf("%-24s%-8s%-16s\n",em[i].status,em[i].publish);
printf("图书单价:\n");
printf("%d\n",em[i].price);
for(j=1;j<=80;j++)
printf("*");
printf("\n");
}
printf("所有图书信息如上;");
}
void search()
{
int i;
char nnum[20];
char ch;
do
{
printf("请输入要查询的图书号:\n");
scanf("%s",nnum);
getchar();
for(i=0;i<= b;i++)
{
if(strcmp(em[i].num,nnum)==0)
{
printf("该图书信息如下:\n");
printf("图书号\t\t图书名\t\t作者名\t时间\n");
printf("%-16s%-16s%-8s%s\n",em[i].num,em[i].name,em[i].author,em[i].time);
printf("图书状态\t\t\t出版商\t\t\n");
printf("%-24s%-8s%-16s\n",em[i].status,em[i].publish);
printf("图书单价:\n");
printf("%d\n",em[i].price);
break;
}
else
printf("抱歉,你所找的图书不存在!\n");
}
printf("请按y键继续查询其他图书信息,其他键结束\n");
ch=getchar();
getchar();
}while(ch=='y'||ch=='Y');
return 0;
}
第六章、心得体会
经过五天的编译原理课程设计,我终于顺利的完成该课程设计了。
还有一点,我还学会了排版,学会了很多的电脑知识。
通过该课程设计,可以掌握编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对C语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要很多次的更正才能达到所要的运行结果。
参考文献
百度网站、搜搜网站、论文网
谭洁强 《C程序设计》 清华大学出版社
张基温 《C程序设计案例教程》 清华大学出版社
王宏 《C#程序设计案例教程》 清华大学出版社
《C语言程序设计.谭浩强版》
C语言之家()
C语言教室()
展开阅读全文