长江大学计算机系
课程实验报告
目录
一.课程设计的题目与要求. 3
1.题目:. 3
2.遇到的问题:. 3
3.要求:. 3
二.课程设计题目功能. 3
1.系统功能模块框图设计. 3
2.数据结构説明. 4
3.输出数据. 5
三.课程设计总结. 8
附录. 9
一.课程设计的题目与要求
1.题目:
C语言简易图书信息管理系统
2.遇到的问题:
用到一些生疏的函数。例如:fputs,fprintf,fopen。
还有一些没遇到的C语言设计的思想。
3.要求:
1) 查询图书基本信息
2) 按书名查询
3) 查询数量>=2的图书信息
4) 显示图书全部信息
5) 按图书数量排序
6) 按图书种类排序
7) 每本图书总价
8) 全部图书总价
9) 修改图书信息
10) 借出图书
二.课程设计题目功能
1.系统功能模块框图设计
:功能函数模块
:函数调用
2.数据结构説明
用到的数据:
int 整型、float 单精度浮点型、char 字符型;
struct 结构体;
函数:
menu()、readfile()、showbooks()、Qrybybookname()、Qrycount()、Qrylbooks()、sortbycount()、sortbychass()、abookprice()、allbookprice()、xie()、faxbook()、write()、brwbook()、exit(0);
F0LE *p 指针;
For循环;
if 如果;
while 循环;
switch 选择;
scanf 输入;
printf 输出;
return 返回;
strcmp 比较数组
fopen 打开文件;
fclose关闭文件;
fgets,fscanf 读文件;
fputs,fprintf 写文件;
3.输出数据
查询图书基本信息
按书名查询
查询数量>=2的图书信息
显示图书全部信息
按图书数量排序
按图书种类排序
每本图书总价
全部图书总价
修改图书信息
借出图书
三.课程设计总结
程序过大,不够精简,无用文字太多。
学习耐心与细心不足,如scanf(“%d”,&n);中的“&”经常忘记。
编程思想不够发散。
在今后学习中应更多的动脑,综合运用所学。
基本功不够,如fputs()等函数用的不好,有时同样的问题多次犯,给实验课老师带来很大的麻烦。这说明我的知识不够广,有很多有用但不做考试要求的书中内容没有学好,认识程度不够深刻。
就算以后C语言这门课程结束后,也应多看相关东西,多上机练习,才能真正从本质上提高自己。
知识不够广泛,如VC++6.0等程序,自己试了好一阵也不会用;说明我电脑水平还是不够,自学能力不够。已会的东西掌握的还是不够好。
实验心得
通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。其间开心过、郁闷过、无奈过、彷徨过……随着实验的胜利成功与实验报告的胜利完成,有点微微的自豪感使人难忘。感谢肖颗老师的高标准、严要求。
感谢实验课上老师的耐心指点,也感谢我在实验中经历过的点点滴滴……伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。对C语言,我会更加努力。
附录
#include"stdio.h"
#include "stdlib.h"
#include"string.h"
#define N 10
struct book
{
int ID;
char Chass[10];
char Bookname[25];
char Author[10];
char Publishing[25];
int Count;
float Price;
};
struct book books[N];
int i;
char h[100];
void menu()
{
printf(" **************************** ");
printf(" 简易图书信息管理系统 ");
printf(" ************************** ");
printf(" 1.查询图书基本信息 ");
printf(" 2.按书名查询 ");
printf(" 3.查询数量>=2的图书信息 ");
printf(" 4.显示图书全部信息 ");
printf(" 5.按图书数量排序 ");
printf(" 6.按图书种类排序 ");
printf(" 7.每本图书总价 ");
printf(" 8.全部图书总价 ");
printf(" 9.修改图书信息 ");
printf(" 10.借出图书 ");
printf(" 11.退出 \n");
}
void readfile()
{
FILE *p;
p=fopen("E:\\梅亚龙201162075.txt","r");
if(p==0)
{
printf("图书信息打开文件错误!\n");
return;
}
fgets(h,100,p);
for(i=0;i<=N;i++)
{
fscanf(p,"%d%s%s%s%s%d%f",&books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,&books[i].Count,&books[i].Price);
}
fclose(p);
}
void Showbooks() /*查询图书基本信息*/
{
readfile();
printf("编号 分类 书名 作者 出版社 数量 单价\n");
for(i=0;i<=N;i++)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
}
void Qrybybookname() /*按书名查询*/
{
char bookname1[25];
printf("请输入书名:\n");
scanf("%s",bookname1);
printf("编号 分类 书名 作者 出版社 数量 单价\n");
readfile();
for(i=0;i<=N;i++)
{
if(strcmp(bookname1,books[i].Bookname)==0)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
}
}
void Qrycount() /*查询数量>=2的图书信息*/
{
printf("编号 分类 书名 作者 出版社 数量 单价\n");
readfile();
for(i=0;i<=N;i++)
{
if(books[i].Count>=2)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
}
}
void Qryallbook() /*显示图书全部信息*/
{
printf("编号 分类 书名 作者 出版社 数量 单价 总价\n");
readfile();
float s,x=0;
for(i=0;i<=N;i++)
{
s=books[i].Count*books[i].Price;
printf("%d %s %s %s %s %d %.2f %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price,s);
x=x+s;
}
printf("全部图书总价:%.2f\n",x);
}
void Sortbycount() /*按图书数量排序*/
{
int s=0;
printf("编号 分类 书名 作者 出版社 数量 单价\n");
readfile();
for(s=0;s>=0;s++)
for(i=0;i<=N;i++)
{
if(books[i].Count==s)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
}
}
void Sortbychass() /*按图书种类排序*/
{
int j;
readfile();
printf("编号 分类 书名 作者 出版社 数量 单价\n");
struct book book1;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(strcmp(books[i].Chass,books[j].Chass)>0)
{
book1=books[i];
books[i]=books[j];
books[j]=book1;
}
for (i=0;i<N;i++)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
}
void abookprice() /*每本图书总价*/
{
printf("书名 总价\n");
float s;
readfile();
for(i=0;i<=N;i++)
{
s=books[i].Count*books[i].Price;
printf("%s %.2f\n",books[i].Bookname,s);
}
}
void allbookprice() /*全部图书总价*/
{
float s;
float x=0;
readfile();
printf("全部图书总价:");
for(i=0;i<=N;i++)
{
s=books[i].Count*books[i].Price;
x=x+s;
}
printf("%.2f\n",x);
}
void xie()
{
FILE *fp;
fp=fopen("E:\\梅亚龙201162075.txt","r");
if(fp==0)
{
printf("图书信息打开文件错误!\n");
return;
}
fputs(h,fp);
for(i=0;i<=N;i++)
{
fprintf(fp,"%s%s%s%s%d%f",books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
printf("修改成功!");
fclose(fp);
}
void faxbook() /*修改图书信息*/
{
int a;
readfile();
printf("请输入修改书号:");
scanf("%d",&a);
printf("编号 分类 书名 作者 出版社 数量 单价\n");
for(i=0;i<=N;i++)
{
if (a==books[i].ID)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
printf("请输入修改后的信息:\n");
scanf("%s%s%s%s%d%f",books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,&books[i].Count,&books[i].Price);
printf("修改后的信息:\n");
printf("编号 分类 书名 作者 出版社 数量 单价\n");
for(i=0;i<=N;i++)
{
printf("%d %s %s %s %s %d %.2f",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
xie();
}
}
}
void write()
{
FILE *fp;
fp=fopen("E:\\梅亚龙201162075.txt","r");
if(fp==0)
{
printf("图书信息打开文件错误!\n");
return;
}
fputs(h,fp);
for(i=0;i<=N;i++)
{
fprintf(fp,"%d",books[i].Count);
}
printf("借出成功!");
fclose(fp);
}
void brwbook() /*借出图书*/
{
int a;
readfile();
printf("请输入借出图书的书号:");
scanf("%d",&a);
printf("编号 分类 书名 作者 出版社 数量 单价\n");
for(i=0;i<=N;i++)
{
if (a==books[i].ID)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
books[i].Count=books[i].Count-1;
printf("借出后的图书信息:\n");
printf("编号 分类 书名 作者 出版社 数量 单价\n");
for(i=0;i<=N;i++)
{
printf("%d %s %s %s %s %d %.2f\n",books[i].ID,books[i].Chass,books[i].Bookname,books[i].Author,books[i].Publishing,books[i].Count,books[i].Price);
}
write();
}
}
if (a>=N)
{
printf("该图书已借出或不存在!");
return;
}
}
void main()
{
int idt;
while (1)
{
menu();
printf("请输入编号:");
scanf("%d",&idt);
switch(idt)
{
case 1: Showbooks();break;
case 2: Qrybybookname();break;
case 3: Qrycount();break;
case 4: Qryallbook();break;
case 5: Sortbycount();break;
case 6: Sortbychass();break;
case 7: abookprice();break;
case 8: allbookprice();break;
case 9: faxbook();break;
case 10: brwbook();break;
case 11: exit(0);break;
}
}
}