宁波工程学院《C语言程序设计》课程设计报告(图书信息管理系统设计)

宁 波 工 程 学 院

2013 ~ 2014 学年第 二 学期

电信学院

C语言课程设计报告

题 目: 图书信息管理系统设计 班 级: 计科13-2 姓 名: 傅天一 学 号: 134xxxxxxxx

指导教师: 洪立

2014 年 6 月

1

目录

目录 ............................................................................................... 2

1、 系统功能和结构 .................................................................. 3

1.1系统设计目的 ................................................................... 3

1.2系统功能分析 ................................................................... 3

1.3系统结构分析 ................................................................... 3

2、 核心技术介绍 ...................................................................... 6

3、 函数功能介绍 ...................................................................... 8

4、 设计体会及总结 .................................................................. 9

参考文献:................................................................................. 10

附录一: ..................................................................................... 11

2

1、 系统功能和结构

1.1系统设计目的

为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。

这种系统设计的人很多,也有很多种系统。总的感觉他们做的界面不够人性化,不够美观。所以我在功能完善的前提下要做到界面更加美观和人性化。

整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。

1.2系统功能分析

(系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现通讯录的管理,同时对操作结果在计算机中做永久保存。)

整个系统可以分为信息录入、信息浏览、信息查询、信息排序、信息删除和信息修改的功能。系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现图书信息的管理,同时对操作结果在计算机中做永久保存。

3

1.3系统结构分析

程序总体结构图

宁波工程学院C语言程序设计课程设计报告图书信息管理系统设计

程序层次图

宁波工程学院C语言程序设计课程设计报告图书信息管理系统设计

4

程序流程图

宁波工程学院C语言程序设计课程设计报告图书信息管理系统设计

5

2、 核心技术介绍

简单选择排序技术:

基本思想:每一趟在后面n-i 个待排记录中选取排序码最小的记录作为有序序列中的第i 个记录。

排序过程:

① 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,

将它与第一个记录交换。

② 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,

将它与第二个记录交换。

③ 重复上述操作,共进行n-1趟排序后,排序结束

实现代码为:

void bookpaixu(struct book*p,int n)

{

int j,i,k;

char c1;

struct book temp;

printf("\n排序前图书的信息记录为:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

printf("\n按登录号排序(D),还是按作者名排序(A)?"); //选择排序的方式 c1=getchar();

getchar();

if(c1=='d'||c1=='D') //选择登录号由小到大排序

{

for(i=0;i<n-1;i++)

{

k=i;

for(j=i+1;j<n;j++)

if(strcmp(p[k].no,p[j].no)>0) //使用选择法进行排序

k=j;

if(k!=i) //如果最小熟不熟默认的p[i],再交换,

{

temp=p[k];

p[k]=p[i];

p[i]=temp;

}

}

printf("\n排序后图书的信息记录为:\n"); //输出排序后图书的信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位 6

","出版时间","价格");

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

}

else if(c1=='a'||c1=='A') //选择作者名由小到大排序

{

for(i=0;i<n-1;i++)

{

k=i;

for(j=i+1;j<n;j++)

if(strcmp(p[k].author,p[j].author)>0)

k=j;

if(k!=i) //使用选择法进行排序

{

temp=p[k];

p[k]=p[i];

p[i]=temp;

}

}

printf("\n排序后图书的信息记录为:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //输出排序后图书的信息

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

}

else

printf("\n您输入的为非法字符!\n");

}

7

3、 函数功能介绍

stdlib.h是包含文件stdlib 头文件即standard library标准库头文件。stdlib 头文

件里包含了C、C++语言的最常用的系统函数。该文件包含了的C语言标准库函数的定义。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()等等。

系统使用的主要函数

void menu();

int bookluru(struct book*p,int n); (录入图书信息)

void bookliulan(struct book*p,int n); (图书信息浏览) void bookchaxun(struct book*p,int n);(图书信息查询)

void bookxiugai(struct book*p,int n); (图书信息修改)

int bookzengjia(struct book*p,int n); (图书信息增加)

void bookpaixu(struct book*p,int n); (图书信息排序)

void DLsearch(struct book*p,int n); (按登入号查询)

void AUsearch(struct book*p,int n); (按作者名查询)

int bookzairu(struct book*p,int n); (图书信息文件储存 )

void goout(); (退出程序)

int bookbaocun(struct book*p,int n); (图书信息保存)

void main() int bookshanchu(struct book*p,int n); (图书信息删除)

系统使用的主要数据结构

struct book{ //定义一个book类结构体。

char no[L];

char name[L];

char author[L];

char fenlei[L];

char puttime[L];

char putfrom[L];

char price[L];

}

8

4、 设计体会及总结

这次课程设计让我掌握了许多的有用知识。首先通过不断地学习和锻炼更加熟练地掌握应用软件Microsoft Visual C++ 6.0 了。设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正式者一步步一点点的努力让我对C语言游乐更深的认识。同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值

通过两周的课程设计,第一次我试着用所学的C语言知识去编制生活中常用的程序。我们是小组选择编辑图书信息管理系统程序。由于分工合作,我负责的是查询和排除模块。起初对知识掌握的不够全面,在整个设计过程中遇到很多问题。比如,编译出现错误,对于格式的掌握还不够透彻;在分界面运行完后,回不到系统的主界面,出现了死循环;在删除信息的板块中,删除了要保留的;运行时,屏幕显示的字之间无空格。后来,通过小组互相帮组讨论,查阅书籍,改善了程序。首先把原程序中的运用scanf()输入字符,改为getchar(),排除了接受回车键所出现的问题,能够顺利的返回主界面。其次,printf()中字符串控制的长度拉宽。最后还是能如期的完成此次实训。

当然,由于初次接触图书管理系统的设计,程序还是存在缺陷。比如操作起来不够简便、连贯,同时也没考虑到实际问题。如图书的价格要取大于等于零的数等。

总之,此次的课程设计还是对我们的专业很有帮助。既巩固了我们的C语言知识,让我们对一部分函数的功能有了更加深刻的理解,把所学运用到实际,也使我们在系统设计领域有了新的拓展,开发我们的思维。

9

参考文献:

[1] 黄明等编著《C语言课程设计》北京:电子工业出版社

[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社

[3] 宁正元《数据结构(c语言)》南京:东南大学出版社。20xx年6月第1版

[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,19xx年4月第1版

[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社

[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社

[7] 洪国胜 等编著 《C++ Builder程序设计轻松上手》北京:清华大学出版社

[8] 宁正元《数据结构(c语言)》 南京:东南大学出版社。20xx年6月第1版

[9] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,19xx年4月第1版。[10] 明日科技编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。

[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,19xx年 第1版。

[12] 刘大有《数据结构》(面向21世纪课程教材) 北京:高等教育出版社。20xx年6月第1版。

[13] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,19xx年 第1 版。

10

附录一:

系统使用方法:

一开始运行程序时,就会出现一个让你选择的界面,1.图书信息录入;2图书信息浏览;3图书信息查询;4图书信息修改;5图书信息增加;6图书信息删除;7图书信息排序;8图书信息保存;0退出图书管理系统;

当你输入1时(首次录入图书信息时),界面就会输出“添加前的图书信息记录有0个: 请输入要录入的图书书目x(0<x<200):”,接着你就按要求输入你要录入的图书的信息就可以了。当你输入2时,就会在出现一个你录入的图书信息,你可以继续选择继续或不,当选择继续时页面会跳转到3图书信息查询界面此时会提示你请按登陆号查询还是按作者名查询?你可以按照提示进行查询操作。当你输入4时,界面会提示你输入要修改的图书登陆号。接下来按照提示信息一步步修改图书信息。当你输入5时,界面会提示你添加图书信息按提示添加完后会显示添加前的图书信息记录和添加后的图书信息记录。当输入6时,界面会提示输入删除图书的登陆号,删除后会显示图书删除后的记录。当输入7时,界面会提示按登陆号排序或按作者名排序,排序后会显示排序后俄图书信息记录。当输入8时,界面会提示“图书信息保存成功!”当输入0时,将会退出图书管理系统。

Ps:

操作每一步结束都回提示是否继续操作(Y/N)。

源代码:

#include<stdio.h> //头文件

#include<string.h>

#include<stdlib.h>

#define L 30 //宏定义

#define Q 200

struct book //定义一个book类结构体。

{

char no[L];

char name[L];

char author[L];

char fenlei[L];

char puttime[L];

char putfrom[L];

char price[L];

};

//函数声明 //函数声明

void menu();

int bookluru(struct book*p,int n);

void bookliulan(struct book*p,int n);

void bookchaxun(struct book*p,int n);

void bookxiugai(struct book*p,int n);

int bookzhengjia(struct book*p,int n);

11

int bookshanchu(struct book*p,int n); void bookpaixu(struct book*p,int n);

void DLsearch(struct book*p,int n);

void AUsearch(struct book*p,int n);

int bookzairu(struct book*p,int n);

void goout();

int bookbaocun(struct book*p,int n);

void main() //主函数

{

char slect,yn;

struct book record[Q]; //定义book类结构体变量存放图书信息共200条

int total=0,flag;

total=bookzairu(record,Q); //从文件读取图书信息,不超过200条 do

{

menu(); //显示菜单

printf("请服务项编号:");

slect=getchar();

getchar();

switch(slect)

{

case'0': goout();break;

case'1': total=bookluru(record,total);break; //函数调用

case'2': bookliulan(record,total);break;

case'3': bookchaxun(record,total);break;

case'4': bookxiugai(record,total);break;

case'5': total=bookzhengjia(record,total);break;

case'6': total=bookshanchu(record,total);break;

case'7': bookpaixu(record,total);break;

case'8': flag=bookbaocun(record,total);

if("flag==1")

printf("图书信息保存成功!\n");

else

printf("图书信息保存失败!\n");

break;

default:continue;

}

if(slect=='0') break;

printf("\n还要继续选择吗?(Y/N)"); //提示是否结束

do

{

yn=getchar();

12

getchar();

if (yn=='Y'||yn=='y')

break;

else if (yn=='N'||yn=='n')

break;

else

printf("非法选项!\n还要继续选择吗?(Y/N)");

}

while(1);

}

while(yn!='N'&&yn!='n');

}

//图书管理系统主菜单.

void menu()

{

system("cls");

system("color 1e");

printf("\n\n");

printf("请选择服务项目编号(0--8)\n");

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("§§ * 7 . 图书信息排序. §§\n");

printf("§§ * 8 . 图书信息保存. §§\n");

printf("§§ * 0 . 退出图书管理系统. §§ 13

\n");

printf("§§ §§\n"); printf("§§ §§\n"); printf("§§ §§\n");

printf("******************************************************************\n"); printf("\n");

}

int bookluru(struct book *p,int n)//录入图书信息.

{

int i=0;

int m;

printf("\n添加前的图书信息记录共有%d个:\n",n); //显示原有的图书信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

i=0;

while((i<n)&&(strcmp(p->no,"")!=0)) //输入的登录号不为空时,输出图书信息 {

printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);//信息输出

i++;

p++;

}

printf("\n请输入要录入的图书数目X(0<X<%d): ",200-n); //设置图书信息存储最大值

scanf("%d",&m);

i=0;

while(i<m)

{

printf("\n");

printf("请输入第%d本图书的信息:\n",i+1);

printf("登录号: ");

do

{

gets(p->no); //输入登录号,再输入其他信息

}

while(strcmp(p->no,"")==0);

printf("书名为:");

gets(p->name);

printf("作者名为:");

gets(p->author);

printf("分类号为:");

gets(p->fenlei);

printf("出版时间为:");

14

gets(p->puttime);

printf("出版单位为:");

gets(p->putfrom);

printf("价格为:");

gets(p->price);

p++;

i++;

}

return m+n;

}

void bookliulan(struct book*p,int n)//图书信息浏览.

{

int i=0;

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

while(i<n) //输出原有图书信息 {

printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);

p++;

i++;

}

}

void bookchaxun(struct book*p,int n)//图书信息查寻.

{

char c;

bookliulan(p ,n);

do

{

printf("\n请问按登录号查询(D),还是按作者名查询(A)?"); //选择查询方式 c=getchar();

getchar();

if(c=='D'||c=='d')

{

DLsearch(p,n);

break;

}

else if(c=='A'||c=='a')

{

AUsearch(p,n);

break;

}

15

else

{

printf("\n输入的为非法字符!\n");

continue;

}

}

while(c!='D'||c!='d'||c!='A'||c!='a');

}

void DLsearch(struct book*p,int n)//按登录号查询.

{

int i,x=0;

char DL[L];

printf("\n请输入要查询图书的登录号:");

gets(DL);

for(i=0;i<n;i++)

if(strcmp(DL,p[i].no)==0) //输入登录号,如果在系统中找到则输出图书信息 {

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);

x=1;

break;

}

if(x==0)

printf("\n对不起,图书系统中没有包含此书的信息!\n");

}

void AUsearch(struct book*p,int n)//按作者名查询.

{

int i,x=0;

char AU[20];

printf("\n请输入要查询图书的作者姓名:");

gets(AU);

for(i=0;i<n;i++)

if(strcmp(AU,p[i].author)==0) //输入作者姓名,如果在系统中找到则输出图书信息 {

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);

x=1;

}

16

if(x==0)

printf("\n对不起,图书系统中没有包含此书的信息!\n"); //提示信息 }

void bookxiugai(struct book*p,int n)//图书信息修改.

{

int i,k=0;

char no[L];

bookliulan(p,n);

printf("\n请输入要修改图书的登录号:");

gets(no);

for(i=0;i<n;i++,p++)

{

if(strcmp(no,p->no)!=0) continue; //输入的登录号不匹配,结束本次循环 else

{

printf("\n请输入正确的图书登录号:");

gets(p->no);

printf("\n请输入正确的图书书名:");

gets(p->name);

printf("\n请输入正确的图书作者名:");

gets(p->author);

printf("\n请输入正确的图书分类号:");

gets(p->fenlei);

printf("\n请输入正确的图书出版时间:");

gets(p->puttime);

printf("\n请输入正确的图书出版单位:");

gets(p->putfrom);

printf("\n请输入正确的图书价格:");

gets(p->price);

printf("\n修改图书图书信息完成!!");

k=1;

}

}

if(k==0)

printf("\n对不起,图书系统中没有包含此书的信息!\n");

}

int bookzhengjia(struct book *p,int n)//图书信息增加.

{

int i=0;

char c;

struct book t;

printf("\n添加前图书信息的记录为:\n");

bookliulan(p ,n);//显示添加前图书信息的记录

do

17

{

printf("请输入新图书信息的登录号:");

gets(t.no);

printf("\n请输入新图书信息的书名为:");

gets(t.name);

printf("\n请输入新图书信息的作者名为:");

gets(t.author);

printf("\n请输入新图书信息的分类号为:");

gets(t.fenlei);

printf("\n请输入新图书信息的出版时间为:");

gets(t.puttime);

printf("\n请输入新图书信息的出版单位为:");

gets(t.putfrom);

printf("\n请输入新图书信息的价格为:");

gets(t.price);

for(i=0;i<n;i++)

if(strcmp(t.no,(p+i)->no)==0||strcmp(t.author,(p+i)->author)==0||strcmp(t.fenlei,(p+i)->fenlei)==0)

{

printf("登录号、作者名和分类号重复,要重新输入吗(Y/N)?"); c=getchar();

putchar('\n');

break;

}

if(i==n)

{

*(p+i)=t;

printf("\n添加后图书的信息记录为:\n"); //显示添加后图书的信息记录

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

for(i=0;i<n+1;i++)

printf("\n%9s%9s%9s%9s%9s%9s%9s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);

break;

}

}

while(c=='y'||c=='Y');

return n+1;

}

int bookshanchu(struct book *p,int n)//图书信息删除.

{

int i,x,y=0;

char no[20];

18

printf("\n删除前图书的信息记录为:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //显示删除前图书的信息记录

for(i=0;i<n;i++)

printf("\n%9s%9s%9s%9s%9s%9s%9s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

printf("\n请输入要删除图书的登陆号:");

gets(no);

for(x=0;x<n;x++)

{

if(strcmp(no,p[x].no)!=0) ////输入的登录号不匹配,结束本次循环

continue;

if(x<n)

{

for(i=x;i<n;i++) //后一个图书信息对前一个图书信息覆盖删除 {

strcpy(p[i].no,p[i+1].no);

strcpy(p[i].author,p[i+1].author);

strcpy(p[i].name,p[i+1].name);

strcpy(p[i].fenlei,p[i+1].fenlei);

strcpy(p[i].price,p[i+1].price);

strcpy(p[i].putfrom,p[i+1].putfrom);

strcpy(p[i].puttime,p[i+1].puttime);

}

printf("图书信息删除后的记录:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //显示图书信息删除后的记录

for(i=0;i<n-1;i++)

printf("\n%9s%9s%9s%9s%9s%9s%9s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);

y=1;

}

else

printf("\n对不起,图书系统中没有包含此书的信息!\n");

return n-y;

}

return 0;

}

//对图书信息排序.

void bookpaixu(struct book*p,int n)

{

int j,i,k;

char c1;

struct book temp;

19

printf("\n排序前图书的信息记录为:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

printf("\n按登录号排序(D),还是按作者名排序(A)?"); //选择排序的方式 c1=getchar();

getchar();

if(c1=='d'||c1=='D') //选择登录号由小到大排序

{

for(i=0;i<n-1;i++)

{

k=i;

for(j=i+1;j<n;j++)

if(strcmp(p[k].no,p[j].no)>0) //使用选择法进行排序

k=j;

if(k!=i) //如果最小熟不熟默认的p[i],再交换,

{

temp=p[k];

p[k]=p[i];

p[i]=temp;

}

}

printf("\n排序后图书的信息记录为:\n"); //输出排序后图书的信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

}

else if(c1=='a'||c1=='A') //选择作者名由小到大排序

{

for(i=0;i<n-1;i++)

{

k=i;

for(j=i+1;j<n;j++)

if(strcmp(p[k].author,p[j].author)>0)

k=j;

if(k!=i) //使用选择法进行排序

{

temp=p[k];

p[k]=p[i];

p[i]=temp;

20

}

}

printf("\n排序后图书的信息记录为:\n");

printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //输出排序后图书的信息

for(i=0;i<n;i++)

printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);

}

else

printf("\n您输入的为非法字符!\n");

}

//图书信息文件存储.

int bookzairu(struct book*p,int n)

{

FILE *fp; //定义FILE类型文件指针变量

int i,all=0;

char bookfile[200]="book.txt";

fp=fopen("book.txt","r+"); //以只读方式打开

if(fp==NULL)

{

printf("\n***打开%s失败!!***",bookfile);

return 0;

}

fscanf(fp,"%d\n",&all); //从文件指针指向的文本文件中按指定格式逐个输入信息到指定变量

if(all>200) //读取记录总数

{

printf("文件记录太多,不能读取!");

return 0;

}

for(i=0;i<all;i++) //图书信息按指定格式输入

{

fscanf(fp,"%s %s %s %s %s %s %s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);

}

fclose(fp); //关闭文件

return all;

}

//图书信息文件保存.

int bookbaocun(struct book*p,int n)

{

21

FILE *fp; //定义FILE类型文件指针变量

int i,all=0;

char bookfile[30]="book.txt";

fp=fopen(bookfile,"w"); //以只写方式打开

if(fp==NULL) //

{

printf("\n***打开%s失败!!***",bookfile);

return 0;

}

fprintf(fp,"%d\n",n); //将数据指定格式字符串输出到文件指针所指向的文本文件。

for(i=0;i<n;i++) //图书信息按指定格式输出

{

fprintf(fp,"%s %s %s %s %s %s %s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p

[i].puttime,p[i].price);

}

fclose(fp); //关闭文件

return 1;

}

//图书管理系统退出

void goout()

{

printf("\n请按Enter键退出图书信息管理系统!\n");

}

22

相关推荐