基础编程能力实训报告题目: 图书管理系统专业年级:计算机科学与技术2013级姓名:学号:2014年06月20日1 实训题目与要求问题描述此系统可以完成对书籍信息的输入、删除、修改、排序等功能,提高图书管理效率,对图书进行合理规划与安排。
功能要求程序输出主菜单(如下),提示用户选择操作表1 主菜单在主菜单中选择1,要求输入图书信息,包括书本序号,书本名字,作者名字,书的价格;在主菜单中选择2,可查询已输入的图书信息;在主菜单中选择3,可通过查找书本的序号,来选择所要删除的图书信息;在主菜单中选择4,对已输入的图书信息,按照图书序号进行排序;在主菜单中选择5,显示图书信息;在主菜单中选择6,可通过查找书本的序号,来选择所要修改的图书,并对图书进行修改;在主菜单中选择7,建立一个名为的文件,并将图书信息录入;在主菜单中选择8,退出图书管理系统。
2 图书管理系统的设计与功能实现图1 系统模块图输入模块完成用户从界面输入图书的信息的功能;查询书籍信息模块完成用户从界面输入查询条件,在系统查询符合条件的图书信息,并在界面上显示的功能;删除书本信息模块完成用户从界面输入需要的图书序号,并将其从系统中删除的功能;书本信息排序模块完成对书本信息的排序的功能;显示书籍信息模块完成显示书本信息的功能;修改书籍信息模块完成用户从界面输入,在系统中查询定位,并将修改过的信息数据保存入系统的功能;录入图书信息模块完成用户从界面输入需要导入的文件路径名称,将信息输入系统的功能;数据结构在程序中,定义了如下结构体:typedef struct{int num;char Bname[50];char Wname[50];float score;}Book;其中是存储书本序号信息,存储书本名字信息,是存储书本作者名信息,存储书本价格信息。
算法设计图2 主函数流程图主函数的作用主要是调用main函数显示主界面,使用printf函数将菜单选项输出在屏幕上,供用户读取选择。
通过读取用户的输入,调用switch函数对用户的输入进行处理,使用while 函数实现用户的选择性的重复操作。
图3 输入函数流程图输入函数的主要作用是完成书籍信息的输入功能,用户先输入书本的实际数量,再输入书本序号、书名、作者名和书本价格并保存到数组中。
图4 查询函数流程图查询函数的作用主要是为完成查找某书籍信息的功能,用户在使用时先输入要查找的书本序号,然后在保存有书籍信息的数组中查找该项,若找到,则显示该项;否则,显示无此书。
图5 删除函数流程图删除函数的主要作用是完成删除某本书籍信息的功能,用户先输入一个要删除的书本序号,然后在保存有书籍信息的数组中查找该项,若找到,则删除该项;否则,显示找不到要删除的书本信息。
程序代码设计⑴主函数需要读取用户所输入的选项来调用其他功能的函数,从而实现程序的各个功能;void main(){…}使用while来循环j值,供用户输入选项,程序判断后进入对应模块,并调用相应的功能函数进行运算,并且使用break在调用完函数后退出switch语句。
⑵void input(Book*a,int*n){…}输入函数,定义结构体类型指针p,printf语句提示用户输入信息,添加for循环,将用户输入的信息保存入数组中。
void find(Book*a,int n){…}查找函数定义结构体指针p,printf语句提示用户输入信息,输入num 后,for循环嵌套if语句按照书本序号查找对应的书本信息,break跳出循环。
void del(Book*a,int*n){…}删除函数定义结构体指针p,printf语句提示用户输入信息,输入要删除的书本序号,对应结构体中已存有的num,for循环中嵌套if语句查找并删除对应的书本信息,break跳出循环。
void sort(Book*a,int n){…}排序函数,采用冒泡法按照书本序号对书籍进行排序。
void display(Book*a,int n){…}输出函数定义结构体p,for循环输出书本信息。
void wenjian(Book*a,int n){…}定义指针变量fp,判断所指向的文件是否存在,定义结构体指针p,使用fprintf函数将数据输入文件中。
void xiugai(Book*a,int n){…}修改函数定义结构体指针p,printf语句提示用户输入信息,输入要修改的书本序号,对应结构体中已存有的num,for循环中嵌套if语句查找并修改对应的书本信息。
void menu(){…}几个printf语句在界面显示出供用户选择的操作框。
测试与调试3实训总结学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
实训期间,学习到很多东西,不仅使我在理论上c语言有了全新的认识,在实践能力上也得到了提高,将课本上的死知识应用于实践中,程序编写是以后工作和学习的基础,第一次尝试编写较复杂的程序,发现以前一直忙于理论知识的学习,这次实训是抽象的理论知识很好的应用,编写过程中,在不断地错误改正中,发现了自己很多知识的理解及联系性的不足,因此,在以后的学习中,我会更加的有的放矢,弥补自己知识面的不足,使自己能更好的牢固掌握本专业知识,完善自我。
附录#include""#include""#include""#define SIZE 80typedef struct{i nt num;c har Bname[50];c har Wname[50];f loat score;}Book;void input(Book*a,int*n){Book*p;i nt i=1;s ystem("cls");p rintf("\n请输入书的序号(1-80)");s canf("%d",n);p rintf("\n请输入书本信息(书本序号/书名/作者/单价):");for(p=a;p<a+*n;p++){printf("\n%d:",i++);scanf("%d%s%s%f",&p->num,p->Bname,p->Wname,&p->score);}printf("按回车键返回:");getch();}void find(Book*a,int n){int k=0;int num;Book*p;system("cls");printf("\n请输入要查询的书的序号");scanf("%d",&num);for(p=a;p<a+n;p++)if(num==p->num){k=1;printf("已找到,是:%d\t%s\t%s\t%.lf\n",p->num,p->Bname,p->Wname,p->score);break;}if(!k)printf("无此书!\n");printf("按回车键返回:");getch();}void del(Book*a,int*n){int i,j,k=0;Book*p;int num;system("cls");printf("\n请输入要删除的书的序号:");scanf("%d",&num);for(i=0,p=a;p<a+*n;i++)if(num==(p+i)->num){k=1;for(j=i;j<*n-1;j++)*(p+j)=*(p+j+1);(*n)--;break;}if(!k)printf("找不到要删除的书本信息!\n");printf("按回车键返回:");getch();}void sort(Book*a,int n){int i,j;Book t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if((a[j].num)>(a[j+1].num)){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("\n输出排序结果:\n");for(i=0;i<n;i++)printf("%d\t%s\t%s\t%.lf\n",a[i].num,a[i].Bname,a[i].Wname,a[i].score);printf("\n");printf("按回车键返回:");getch();}void display(Book*a,int n){Book*p;for(p=a;p<a+n;p++)printf("%d\t%s\t%s\t%.lf\n",p->num,p->Bname,p->Wname,p->score);printf("\n");printf("按回车键返回:");getch();}void wenjian(Book*a,int n){F ILE *fp;B ook*p;i nt i;s ystem("cls");fp=fopen("","w+");i f(fp==NULL)printf("打开失败\n");e lse{for(i=0,p=a;i<n;i++,p++)fprintf(fp,"%d%s %s %f\n",p->num,p->Bname,p->Wname,p->score);printf("写入成功\n");}p rintf("\n");p rintf("按回车键返回:");g etch();}void xiugai(Book*a,int n){B ook*p;i nt i,m;s ystem("cls");p rintf("请输入要修改的书号:");s canf("%d",&m);f or(p=a;p<a+n;p++)if(m==p->num){printf("请输入修改后的信息(书号/书名/作者/单价)\n");scanf("%d%s%s%f",&p->num,&p->Bname,&p->Wname,&p->score);}printf("\n");printf("按回车键返回:");getch();}void menu(){system("cls");printf("\n\n\n\t\t\t 欢迎使用图书管理系统\n\n\n");printf("\t\t\t*********************************\n");printf("\t\t\t* 主菜单 *\n");printf("\t\t\t*********************************\n\n\n");printf("\t\t 1 输入 2 查询\n\n");printf("\t\t 3 删除 4 排序\n\n");printf("\t\t 5 显示 6 修改\n\n");printf("\t\t 7 录入 8 退出\n\n");printf("\t\t 请选择[1/2/3/4/5/6/7/8]:");}void main(){int j,num;Book book[SIZE];while(1){ menu();scanf("%d",&j);switch(j){case 1: input(book,&num);break; case 2: find(book,num);break;case 3: del(book,&num);break;case 4: sort(book,num);break;case 5: display(book,num);break; case 6: xiugai(book,num);break; case 7: wenjian(book,num);break; case 8: exit(0);}}}。