资源描述
C 语 言 课 程 实 习 报 告
所 在 院 系 :工程学院
班 级 学 号 :052126-20121002220
姓 名 :方日忠
程序 已存档 : □ 是 □ 否
指 导 老 师 :赵 曼
评 分 :____________
二零一四年七月
1.题目要求
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作(2)图书信息录入功能(3)图书信息浏览功能
(4)图书信息查询功能(5)图书信息的删除与修改
2.需求分析
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
3.总体设计:
根据题目要求,可以将系统分为六个模块:
图书信息管理系统
菜单 图书 图书 图书 图书 图书
选择 录入 浏览 查询 删除 修改
功能 功能 功能 功能 功能 功能
模块 模块 模块 模块 模块 模块
4.详细设计:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*********图书信息结构体*********/
/***包括书号、书名、作者、出版社、出版时间,价格***/
typedef struct {
char number[10];//书号
char name[20];//书名
char author[20];//作者
char publish[50];//出版社
char time[20];//出版时间
float price; //价格
}mbook;
typedef struct {
int count;//书的本数
mbook book[100];//最大可有100本书
}mlibrary;
mlibrary library;
void save()//保存图书信息
{
FILE *fp;
if((fp=fopen("library.doc","w"))==NULL)
{
printf("\n不能保存图书信息\n");
return;
}
fwrite(&library.count,sizeof(int),1,fp);
fwrite(library.book,sizeof(library.book[0]),library.count,fp);
}
/***********图书信息录入功能模块***********/
/*分析:设计一判断语句和循环语句,继续录入则输入1,为真,进入循环。用scanf输入要录入的信息*/
void putin() /*定义录入函数*/
{
int y=1;
system("cls");
while(y)
{
printf("\t请输入您的书籍的书号:");
scanf("%s",library.book[library.count].number);
printf("\t请输入书名:");
scanf("%s",library.book[library.count].name);
printf("\t请输入作者名:");
scanf("%s",library.book[library.count].author);
printf("\t请输入出版社:");
scanf("%s",library.book[library.count].publish);
printf("\t请输入出版时间:");
scanf("%s",library.book[library.count].time);
printf("\t请输入该书的价格:");
fflush(stdin);
scanf("%f",&library.book[library.count].price);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):");
fflush(stdin);
scanf("%d",&y);
if (y!=1)
{
y=0;
break;
}
}
save();
}
/***********图书信息浏览功能模块***********/
/*分析:设计一循环,在i<总书本数library.count 时,依次显示书的信息*/
void lookup()
{
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for (int i=0;i<library.count;i++)
{
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
fflush(stdin);
getchar();
}
/**********图书信息查询功能模块**********/
/**********按书名查询**********/
/*分析:首先输入要查找的书名,然后利用循环语句和strcmp 函数,把输入书名和已录入的所有书名一一比较,若相同,则跳出循环,将该书信息显示出来*/
void search_by_name() /*定义按书名查询*/
{char s2[20];
int flag=1;
printf("\n请输入要查询的书名: ");
fflush(stdin);
scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(int i=0;i<library.count;i++ )
if(strcmp(s2,library.book[i].name)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if (flag)
{
printf("cannot found!");
}
fflush(stdin); //清空输入缓冲区,为了确保不影响后面的数据读取
getchar();
}
/**********按作者名查询**********/
/*分析:首先输入要查找的作者名,然后利用循环语句和strcmp 函数,把输入的作者名和已录入的所有书的作者名一一比较,若相同,则跳出循环,将该书信息显示出来*/
void search_by_author() /*定义按作者名查询*/
{
char s3[20];
int flag=1;
printf("请输入要查询的书的作者: ");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(int i=0;i<library.count;i++ )
if(strcmp(s3,library.book[i].author)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if (flag)
{
printf("cannot found!");
}
fflush(stdin); //清空输入缓冲区,为了确保不影响后面的数据读取
getchar();
}
/********************/
void search() /*定义查询函数*/
{
int a;
system("cls"); /*进行清屏*/
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------search_by_name\n");
printf("\t\t\t2---------------search_by_writer\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n") ;
printf("\t\t请选择你想要的查询方式:");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 1:
search_by_name();
break;
case 2:
search_by_author();
break;
case 0:
return;
}
}
/**********图书信息删除功能模块**********/
/*分析:首先输入要删除的图书号,然后利用循环语句和strcmp 函数,把输入的图书号和已录入的所有书的图书号一一比较,若相同,则跳出循环,然后利用循环语句和strcpy 函数将后一本书的信息复制给前一本书,这样就达到了删除的目的*/
void del() /*定义删除函数*/
{
char number[10];
system("cls"); /*清屏*/
printf("\n Please type in the number of the book you want to delete:");
fflush(stdin);
scanf("%s",number);
int i;
for (i=0;i<library.count;i++)
{
if(strcmp(number,library.book[i].number)==0)break;
}
if (i!=library.count)
{
for(;i<library.count-1;i++)
{
strcpy(library.book[i].name,library.book[i+1].name);
strcpy(library.book[i].number,library.book[i+1].number);
strcpy(library.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
library.book[i].price=library.book[i+1].price;
}
library.count--;
}
else
printf("\n cannot found!\n");
save();
fflush(stdin);
getchar();
}
/**********图书信息修改功能模块**********/
/*分析:首先输入要修改的图书号,然后利用循环语句和strcmp 函数,把输入的图书号和已录入的所有书的图书号一一比较,若相同,则跳出循环,然后输入要修改后的信息,利用循环语句和strcpy 函数将要修改后的信息复制给原来的对应的书本,即用新的信息代替了原来的信息*/
void update()//修改图书信息
{
char number[10];
system("cls"); /*清屏*/
printf("\n Please type in the number of the book you want to delete:");
fflush(stdin);
scanf("%s",number);
int i;
for (i=0;i<library.count;i++)
{
if(strcmp(number,library.book[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
break;
}
}
if (i!=library.count)
{
mbook book;
printf("\n\t\t请输入修改后此图书的信息\n");
printf("\t请输入图书号:");
scanf("%s",book.number);
printf("\t请输入图书名:");
scanf("%s",book.name);
printf("\t请输入作者名:");
scanf("%s",book.author);
printf("\t请输入出版社:");
scanf("%s",book.publish);
printf("\t请输入出版时间:");
scanf("%s",book.time);
printf("\t请输入该书的价格:");
fflush(stdin);
scanf("%f",&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);
strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i].time,book.time);
library.book[i].price=book.price;
save();
}
else
printf("\n cannot found!\n");
fflush(stdin);
getchar();
/**********主函数**********/
开始
显示一系列功能选项
输入a,判断
a是否是0~5
根据a的值调用各功能模块函数
结束
Y
N
void main()
{
FILE *fp;
if((fp=fopen("library.doc","r"))==NULL)
{
printf("\n不能打开图书信息库\n");
fp=fopen("library.doc","w+");
printf("\n初始化图书信息库,初始化之后要重启程序\n");
library.count=0;
fwrite(&library.count,sizeof(int),1,fp);
fclose(fp);
return;
}
fread(&library.count,sizeof(int),1,fp);
fread(library.book,sizeof(library.book[0]),library.count,fp);
fclose(fp);
int a;
do
{
system("cls");
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1 ------------------图书信息录入\n");
printf("\t\t\t2 ------------------图书信息浏览\n");
printf("\t\t\t3 ------------------图书信息查询\n");
printf("\t\t\t4 ------------------图书信息删除\n");
printf("\t\t\t5 ------------------图书信息修改\n");
printf("\t\t\t0 -----------------退出图书信息系统\n");
printf("\t\t*********************************************\n");
printf("\t\tPlease Enter Choose: ");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 1:
putin();
break;
case 2:
lookup();
break;
case 3:
search();
break;
case 4:
del();
break;
case 5:
update();
break;
case 0:
printf("\n\n退出\n\n");
break;
default:
printf("\n序号不对\n");
}
}while(a!=0);
save();
}
5.程序运行截图
主菜单函数
录入模块
浏览模块
查询模块
修改模块
直接退出
6.总结
这次课程设计让我掌握了许多的有用知识。首先通过不断地学习和锻炼更加熟练地掌握应用软件Microsoft Visual C++ 6.0 了。其次,这次设计让我重温并掌握了c语言的各个方面的知识点。曾经为了应对考试的我只是粗略的看了遍课本,然后就是刷题。由于知识网存在严重的漏洞,最终,导致了我在c语言二级考试当中的失败。经过这次的实习,我对c语言二级顿时充满了信心。
设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正是这一步步一点点的努力让我对C语言有了更深的认识。在设计中,我遇到一些困难,这些困难常常让我心情烦躁,比如不能清晰的建立设计模块,不会修改出现的错误等等,但是我忍了,我认识到这是一个耐力的比拼,只有静下心来,耐心的写程序,才能获得最后的胜利。终于,我通过自己努力建立了模块。在这过程中,我掌握了解决问题的方法,这对以后的学习、生活都有无比重要的价值。
在写程序的过程中,主要还是得靠自己,同学没时间帮你修改、找错误,即使有时间,设计思路不一样的我们还是没办法修改。所以,一切还是要靠自己,耐得住寂寞,才能开出灿烂的花。我希望在以后的学习和应用中不断提高自己的能力,攻克遇到的困难,一步一步的向前进,将这一实用的技术应用到专业或工作当中。
展开阅读全文