计算机科学与技术专业课程设计任务书1 需求分析1本演示程序中,用户从键盘输入图书信息,图书编号,名称,类别,作者,出版社,价格,购买日期。
2演示程序以用户和计算机的对话方式执行,即在运行窗口出现提示信息,有用户从键盘录入,显示结果会在显示之后。
3程序执行的命令包括:查询图书信息,删除图书信息,对所有图书进行排序,统计各种类的图书数目。
显示所有图书信息4 测试数据:2001 离散数学 X 左孝凌上海科学出版社 18.00 2009/6/82002 数据结构 B 严蔚敏清华大学出版社 30.00 2010/4/1 2 程序总体设计(1)数据结构依据输入的数据信息和数据格式,连表结点用结构体实现。
采用链表方式存储,typedef:typedef struct //定义表示日期数据的结构体数据类型{int month;int day;int year;} DATE;typedef struct Booktype //定义表示图书信息的结构体数据类型{char id[10]; /* 图书编号*/char name[40]; /* 图书名称*/char type; /* 图书类型*/char writer[10]; /* 图书作者*/char publisher[20]; /* 图书出版社*/float price; /* 图书价格*/DA TE buydate; /* 图书购买日期*/} Btype;typedef struct Booklist /* 定义表示所有图书信息的链表数据类型*/{Btype *bk;struct Booklist *next;} Blist;(2)模块划分程序函数清单:Void maininterface(); /* 主界面函数*/ void Bookinput(); /* 输入图书信息函数*/ void Bookdisplay(); /* 显示所有图书信息函数*/ void Booksort(); /* 对图书分类排序函数*/ void Booksearch(); /* 查找图书详细信息函数*/ void Bookdelete(); /* 删除图书信息函数*/ void Bookstat(); /* 统计全部图书数目*/(3)程序总体框架菜单代码3 功能块函数与调试录入图书信息函数1 函数名称:voidBookinput();函数功能:从键盘祸从文件读入图书信息。
2 程序清单 { int n=0; Btype bk;FILE *fp;Loop:printf("\n\n\n\t\t\t 图书信息录入\n"); printf("\n\t\t1: 图书编号:"); scanf("%s",bk.id);printf("\n\t\t2: 图书名称:"); scanf("%s",);printf("\n\t\t3: 图书类别(X:学习 B:编程 Y:娱乐 G:工具 Q:其它):"); scanf("%s",&bk.type); printf("\n\t\t4: 图书作者:"); scanf("%s",bk.writer);printf("\n\t\t5: 图书出版社:"); scanf("%s",bk.publisher); printf("\n\t\t6: 图书价格(元):"); scanf("%f",&bk.price);printf("\n\t\t7: 购买日期(mm/dd/yyyy):");scanf("%d/%d/%d",&,&,&;printf("\n\t\t1: 保存并继续输入\n");printf("\n\t\t2: 保存并返回\n");printf("\n\t\t3: 取消并重新输入\n");printf("\n\t\t4: 返回主菜单\n");printf("\t\t请输入选项:");scanf("%d",&n);if(n==1){if((fp=fopen("Book.lib","ab"))==NULL)fp=fopen("Book.lib","wb+");fwrite(&bk,sizeof(Btype),1,fp);goto Loop;}if(n==2){ if((fp=fopen("Book.lib","ab"))==NULL)fp=fopen("Book.lib","wb+");fwrite(&bk,sizeof(Btype),1,fp);fclose(fp);}if(n==3) goto Loop;}3 运行结果查询图书信息函数1.函数原型,功能和形参说明函数原型:void Booksearch();函数功能:查询图书信息;2.程序清单:{Btype bk,ts;FILE *fp;int i;int j=0;if((fp=fopen("Book.lib","rb+"))==NULL){printf("找不到文件Book.lib !\n");exit(0);}rewind(fp);printf("\n请选择按哪个参数查询(1:编号2:名称3:作者4:出版社5:价格):");scanf("%d",&i);if(i==1){printf("请输入您要查询的图书的编号\n");scanf("%s",ts.id);while(!feof(fp)){if (fread(&bk,sizeof(Btype),1,fp))if(strcmp(ts.id,bk.id)==0){printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writer,bk .publisher,bk.price,,,;j++;}}fclose(fp);if(j==0) printf("\n找不到您要查询的图书信息!\n");}if(i==2){printf("请输入您要查询的图书的名称\n");scanf("%s",);while(!feof(fp)){if (fread(&bk,sizeof(Btype),1,fp))if(strcmp(,)==0){printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writer,bk .publisher,bk.price,,,;j++;}}fclose(fp);if(j==0) printf("\n找不到您要查询的图书信息!\n");}if(i==3){printf("请输入您要查询的图书的作者\n");scanf("%s",ts.writer);while(!feof(fp)){if (fread(&bk,sizeof(Btype),1,fp))if(strcmp(ts.writer,bk.writer)==0){printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writer,bk .publisher,bk.price,,,;j++;}}fclose(fp);if(j==0) printf("\n找不到您要查询的图书信息!\n");}if(i==4){printf("请输入您要查询的图书的出版社\n");scanf("%s",ts.publisher);while(!feof(fp)){if (fread(&bk,sizeof(Btype),1,fp))if(strcmp(ts.publisher,bk.publisher)==0){printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writer,bk .publisher,bk.price,,,;j++;}}fclose(fp);if(j==0) printf("\n找不到您要查询的图书信息!\n");}if(i==5){printf("请输入您要查询的图书的价格\n");scanf("%f",&ts.price);while(!feof(fp)){if (fread(&bk,sizeof(Btype),1,fp))if(ts.price==bk.price){printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writer,bk .publisher,bk.price,,,;j++;}}fclose(fp);if(j==0) printf("\n找不到您要查询的图书信息!\n");}}3 运行结果:删除图书信息函数1.函数原型,功能和形参说明函数原型:void Bookdelete();函数功能:查询图书信息;2.程序清单:void Bookdelete(){Blist *head, *p, *q;Blist *s,*h;FILE *fp;int n=0;int i=0;if((fp=fopen("Book.lib","rb+"))==NULL){printf("找不到文件Book.lib !\n");exit(0);}head= (Blist *)malloc(sizeof(Blist));head->bk = (Btype *)malloc(sizeof(Btype)); head->bk = NULL;q=p = (Blist *)malloc(sizeof(Blist));q->bk=p->bk = (Btype *)malloc(sizeof(Btype)); rewind(fp);printf("\n");while(!feof(fp)){p= (Blist *)malloc(sizeof(Blist));p->bk = (Btype *)malloc(sizeof(Btype));if (fread(p->bk,sizeof(Btype),1,fp)){n++;if(n==1) head->next=p;else q->next=p;q=p;}}q->next=NULL;fclose(fp);s=head;h = (Blist *)malloc(sizeof(Blist));h->bk = (Btype *)malloc(sizeof(Btype));printf("请输入您要删除的图书的编号!\n");scanf("%s",h->bk->id);for(s=head;s->next;s=s->next){if(strcmp(h->bk->id,s->next->bk->id)==NULL){if(!s->next->next) { s->next=NULL; printf("已删除编号为:%d的图书!\n",s->next->bk->id);i++;break;}else { s->next=s->next->next; printf("已删除编号为:%d的图书!\n",s->next->bk->id);i++;break; }}}if(i!=0){for(s=head->next;s;s=s->next){printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",s->bk->id,s->bk->name,s->bk->ty pe,s->bk->writer,s->bk->publisher,s->bk->price,s->bk->buydate.month,s->bk->buydate.day,s->bk ->buydate.year);}if((fp=fopen("Book.lib","w+"))==NULL)fp=fopen("Book.lib","wb+");/* 将输入的图书信息写入磁盘文件"Book.lib" */for(s=head->next;s;s=s->next)fwrite(s->bk,sizeof(Btype),1,fp);fclose(fp);}if(i==0) printf("找不到该编号的图书信息!\n");}3 运行结果:图书排序函数1.函数原型,功能和形参说明函数原型:void Bookdelete();函数功能:查询图书信息;2.程序清单:int sort(Btype *str1, Btype *str2, int type);void Booksort(){Blist *head, *p, *q;FILE *fp;int type;printf("\n请选择对哪一个参数排序(1:编号2:名称3:作者4:出版社5:价格6:类别):"); printf("\n");scanf("%d",&type);/* 打开文件*/if((fp=fopen("Book.lib","rb+"))==NULL){printf("找不到文件Book.lib !\n");exit(0);}if (!(head = (Blist *)malloc(sizeof(Blist)))){printf("内存不足!\n");exit(0);}head->bk= NULL;head->next = NULL;rewind(fp);printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");while(!feof(fp)){if (!(p = (Blist *)malloc(sizeof(Blist))) || !(p->bk = (Btype *)malloc(sizeof(Btype)))){printf("内存不足!\n");exit(0);}if (fread(p->bk,sizeof(Btype),1,fp)){for (q = head; q->next && sort(q->next->bk, p->bk, type) < 0; q = q->next);p->next = q->next;q->next = p;}}fclose(fp);for (q = head->next; q; q=q->next)printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",q->bk->id,q->bk->name,q->b k->type,q->bk->writer,q->bk->publisher,q->bk->price,q->bk->buydate.month,q->bk->buydate.da y,q->bk->buydate.year);}int strsort(char *str1, char *str2, int len){int i = 0;for (; i < len && str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i]; i ++);if (i == len || str1[i] == str2[i])return 0;else if (str1[i] > str2[i])return 1;elsereturn -1;}int sort(Btype *bk1, Btype *bk2, int type){switch (type){case 1:return strsort(bk1->id, bk2->id, 10);case 2:return strsort(bk1->name, bk2->name, 40);case 3:return strsort(bk1->writer, bk2->writer, 10);case 4:return strsort(bk1->publisher, bk2->publisher, 20);case 5:if (bk1->price > bk2->price)return 1;else if (bk1->price < bk2->price)return -1;elsereturn 0;default:if (bk1->type > bk2->type)return 1;else if (bk1->type < bk2->type)return -1;elsereturn 0;}}3 运行结果:图书总数统计函数1.函数原型,功能和形参说明函数原型:void Bookstat();函数功能:图书总数统计函数;2.程序清单:void Bookstat() //图书总数统计函数{Blist *head, *p, *q;FILE *fp;int n;/* 打开文件*/if((fp=fopen("Book.lib","rb+"))==NULL){printf("找不到文件Book.lib !\n");exit(0);}if (!(head = (Blist *)malloc(sizeof(Blist)))){printf("内存不足!\n");exit(0);}head->bk = NULL;head->next = NULL;rewind(fp);printf("\n");while(!feof(fp)){if (!(p = (Blist *)malloc(sizeof(Blist))) || !(p->bk = (Btype *)malloc(sizeof(Btype)))) {printf("内存不足!\n");exit(0);}if (fread(p->bk,sizeof(Btype),1,fp)){for (q = head; q->next && sort(q->next->bk, p->bk, 6) < 0; q = q->next);p->next = q->next;q->next = p;}}fclose(fp);for (q = head->next; q; q=q->next){for (n = 1; q->next && q->bk->type == q->next->bk->type; n ++, q = q->next);printf("\t\t%c 类型的图书共有%d 本\n", q->bk->type, n);}}3 运行结果:全部图书信息显示函数1.函数原型,功能和形参说明函数原型:void Bookdisplay();函数功能:图书总数统计函数;2.程序清单:void Bookdisplay() /{Btype bk;FILE *fp;if((fp=fopen("Book.lib","rb+"))==NULL){ printf("找不到文件Book.lib !\n");exit(0);}rewind(fp);printf("\n%4s %-20s%4s %-8s %-20s%-8s %8s","编号","图书名称","类别","作者","出版社","价格","购买日期");while(!feof(fp)){ if (fread(&bk,sizeof(Btype),1,fp))printf("\n%4s %-18s %-3c %-8s %-18s%8.2f %2d/%d/%d",bk.id,,bk.type,bk.writ er,bk.publisher,bk.price,,,;}fclose(fp);}3 运行结果:主函数1.函数原型,功能和形参说明函数原型:void main();函数功能:用户操作界面;2.程序清单:void main(){ int n=0;do{ maininterface();printf("请选择功能(0-5)\n");scanf("%d",&n);switch (n){ case 1: { Bookinput(); break; }case 2: { Booksearch(); break; }case 3: { Bookdelete(); break; }case 4: { Booksort(); break; }case 5: { Bookdisplay(); break; }case 6: { Bookstat(); break; }case 0: { printf("谢谢使用该系统再见!\n"); break; } }}while(n!=0);}void maininterface(){ printf("\n\n\n\t\t\t个人图书管理系统\n");printf("\n\t\t1: 输入图书信息\n");printf("\n\t\t2: 查询图书信息\n");printf("\n\t\t3: 删除图书信息\n");printf("\n\t\t4: 图书信息排序\n");printf("\n\t\t5: 显示全部图书信息\n");printf("\n\t\t6: 统计全部图书数目\n");printf("\n\t\t0: 退出系统\n");}运行结果:4 参考文献C程序设计(第三版)谭浩强数据结构(严蔚敏)高质量的编程指南数据结构与算法(科学出版社)。