C语言程序设计方案报告菜单源码测试.docx
《C语言程序设计方案报告菜单源码测试.docx》由会员分享,可在线阅读,更多相关《C语言程序设计方案报告菜单源码测试.docx(22页珍藏版)》请在咨信网上搜索。
一:系统功效 基础功效: 图书录入,删除,查找,和导入导出等。 图书属性: 书号,书名,第一作者,版次,出版年等。 菜单功效: 1. Input Records(输入若干条统计) 从键盘一次输入一本书信息,存放到结构体数组中,然后显示。提醒信息,确定是否输入下一条统计。 2. Display All Records(显示全部统计) 按次序显示全部统计,每屏显示10条统计,按<Enter>键继续显示下一屏。 3. Delete a Record(按书名查找,删除一本书) 输入待删除书书名,显示该书名全部书目,提醒输入待删除书目标书号,提醒是否删除,确定后,删除该书。 4. Sort(排序) 以书名为升序排列数组 5. Insert a record(插入一条统计) 以书名为序排列数组中插入一条统计,插入后,数组仍然有序。输出插入成功后信息。 6. Query(查找并显示一个统计) 输入书名,查找并显示包含该书名全部图书信息 7. Add Records from a Text File(从文件读入图书信息到结构体数组中) 用户可事先建立一个文本文件Dictory.txt。存放全部图书信息,文件格式以下: 2 1182 高等数学刘浩荣 5 同济大学出版社 7300 物理化学王德明 2 化学工业出版社 8. Write to a Text File 将数组中全部统计写入文件Records.txt中,要求格式和Dictory.txt相同。 0. Quit(退出图书管理系统) 新增加菜单功效: 9. Change a record 修改某一条统计值 a. Menu 显示菜单 b. Clear Screen 清屏 c. Pause 按暂停,按任意键继续 二:数据结构 Typedef struct { char ISBN[10];//书号 char book[30];//书名 char author[20];//作者 Int edition;//版本号 char press[50];//出版社名 int year;//出版年 }Bookinfo; 三:函数调用关系 Write_to_Text() Display_main_menu() Change_a_record() Delete() Sort_by_name() Insert() Insert_a_record() AddfromText() Delete_a_record() Display() Query() Query_a_record() Input() main 四:关键算法及实现 i=0 语句B n+1 是 是 是 否 否 否 b=strcmp((*s).book,dictList[i].book)>=0 c=strcmp((*s).book,dictList[i+1].book)<=0 语句A:dictList[j]=dictList[j-1]; 语句B:dictList[i+1]=*s; i++ n+1 j-- 语句A j>i+1 j=n b&&c i<n-1 i=0 插入算法 排序算法 结束 否 否 是 否 否 是 是 是 p=j 语句A i++ j++ j<n b>0 P!=i p=i j=i+1 i<n-1 i=0 开始 b=strcmp(dictList[p].book,dictList[j].book) 语句A:t = dictList[p]; dictList[p] = dictList[i]; dictList[i] = t; 五:源程序(含注释) #include<stdio.h> #include<string.h> #include<stdlib.h> #define NUM 100 typedef struct //定义结构体数组 { char ISBN[10]; //书号 char book[30]; //书名 char author[20]; //作者 int edition; //版本号 char press[50]; //出版社名 int year; //出版年 }Bookinfo; int Input(Bookinfo dictList[],int n) //从键盘输入数据,存入结构体数组dictList { char c1,c2; do{ c1=getchar(); printf("Please input ISBN:\n"); gets(dictList[n].ISBN); printf("Please input book:\n"); gets(dictList[n].book); printf("Please input author:\n"); gets(dictList[n].author); printf("Please input press:\n"); gets(dictList[n].press); printf("Please input edition:\n"); scanf("%d",&dictList[n].edition); printf("Please input year:\n"); scanf("%d",&dictList[n].year); n+=1; printf("是否输入下一条?确定(y)|取消(n)\n");//提醒信息 c1=getchar(); }while((c2=getchar())=='y'); return(n); //返回值为新统计数量 } void Display(Bookinfo dictList[],int n) //显示全部统计,每10个暂停一次,输入回车继续显示 { int i=0,j; char input,c; printf("%-10s%-23s%-18s%-8s%-15s%-4s\n","ISBN","book","author","edition","press","year"); c=getchar(); do{ j=10; //每10个循环一次 do { printf("%-10s%-23s%-18s%-8d%-15s%-4d\n",dictList[i].ISBN,dictList[i].book,dictList[i].author,dictList[i].edition,dictList[i].press,dictList[i].year); i++; j--; }while(j && i<n); if(i==n) break; //若数据全部输出,则跳出循环, scanf("%c",&input); }while(input=='\n'); //输入回车,实施循环 } int delete(Bookinfo dictList[],int n,char *ISBN) //只删除书号为ISBN第一条统计 { int i,j; for(i=0;i<n;i++) { if(!strcmp(dictList[i].ISBN,ISBN)) //strcmp()函数判定两个字符串是否相等 { for(j=i;j<n-1;j++) dictList[j]=dictList[j+1]; //将目标值右面数据全部左移一位 return(n-1);//删除后统计数降低1 } } return(n); } int Delete_a_record(Bookinfo dictList[],int n)//删除某一条统计 { int i,j=0; char book[30],isbn[10],s,c; c=getchar(); printf("请输入待删除书目标书名\n"); gets(book); //获取书名字符串 printf("%-10s%-23s%-18s%-8s%-15s%-4s\n","ISBN","book","author","edition","press","year"); for(i=0;i<n;i++) { if(!strcmp(dictList[i].book,book)) { //找到同名数据,并输出 printf("%-10s%-23s%-18s%-8d%-15s%-4d\n",dictList[i].ISBN,dictList[i].book,dictList[i].author,dictList[i].edition,dictList[i].press,dictList[i].year); j++; } } if(j>0) { printf("请输入待删除书目标书号\n"); gets(isbn); //获取要删除数据书号 printf("确实要删除该统计?是(y)|否(n)\n"); //提醒删除 if((s=getchar())=='y') { for(i=0;i<n;i++) { if(!strcmp(dictList[i].ISBN,isbn)) { //调用delete函数删除 printf("删除成功!\n"); return(delete(dictList,n,dictList[i].ISBN)); } } printf("未找到待删除统计!\n"); //删除成功后统计减1 } else { printf("已取消删除!\n"); //取消删除后统计数不变 return n; } }else printf("未找到待删除统计!\n"); } void Sort_by_name(Bookinfo dictList[],int n)//选择法按书名升序排列 { int i,j,p; Bookinfo t; for(i = 0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(strcmp(dictList[p].book,dictList[j].book)>0) p=j; if(p!=i) { t = dictList[p]; dictList[p] = dictList[i]; dictList[i] = t; } } } int insert(Bookinfo dictList[],int n,Bookinfo *s)//按书名次序插入统计 { int i,j; Sort_by_name(dictList,n); for(i=0;i<n-1;i++) { if(strcmp((*s).book,dictList[0].book)<0) { for(j=n;j>0;j--) dictList[j]=dictList[j-1]; dictList[0]=*s; return(n+1); } else if(strcmp((*s).book,dictList[i].book)>=0 && strcmp((*s).book,dictList[i+1].book)<=0) { for(j=n;j>i+1;j--) dictList[j]=dictList[j-1]; dictList[i+1]=*s; //放在i和i+1之间或放在最终一个 return(n+1); } } dictList[n]=*s; return(n+1); } int Insert_a_record(Bookinfo dictList[],int n)//出现问题,调用该函数时总是全部显示统计? { int k; char c; Bookinfo s; //输入数据 c=getchar(); printf("Please input ISBN:\n"); gets(s.ISBN); printf("Please input book:\n"); gets(s.book); printf("Please input author:\n"); gets(s.author); printf("Please input press:\n"); gets(s.press); printf("Please input edition:\n"); scanf("%d",&s.edition); printf("Please input year:\n"); scanf("%d",&s.year); k=insert(dictList,n,&s); //依据insert返回值是否大于n判定插入成功是否 if(k>n) { printf("插入成功!\n"); return(k); } else { printf("插入失败!\n"); return(n); } } int Query(Bookinfo dictList[],int n,char *book)//查询并显示书名为book统计 { int i,count=0; printf("%-10s%-23s%-18s%-8s%-15s%-4s\n","ISBN","book","author","edition","press","year"); for(i=0;i<n;i++) { if(!strcmp(dictList[i].book,book)) { printf("%-10s%-23s%-18s%-8d%-15s%-4d\n",dictList[i].ISBN,dictList[i].book,dictList[i].author,dictList[i].edition,dictList[i].press,dictList[i].year); count++; } } if(count) return count; //查询成功,返回个数 else return -1; //未找到,返回-1 } void Query_a_record(Bookinfo dictList[],int n) { int i; char book[30],c; c=getchar(); printf("请输入待查找书名\n"); //输入书名 gets(book); if((i=Query(dictList,n,book))>0) printf("共找到%d条统计\n",i); //若查到数据,Query函数返回值为正数 else printf("未找到所查找统计\n"); } int AddfromText(Bookinfo dictList[],int n,char *filename) { int i; Bookinfo s; FILE *p; p=fopen(filename,"r"); fscanf(p,"%d",&i); //先读取文件第一行统计数 while(i--) { fscanf(p,"%s%s%s%d%s%d\n",s.ISBN,s.book,s.author,&s.edition,s.press,&s.year); //读取统计具体值 n=insert(dictList,n,&s); //插入到dictList数组中 } fclose(p); printf("读取成功!\n"); return(n); } void WritetoText(Bookinfo dictList[],int n,char *filename) { FILE *p2; int i; p2=fopen(filename,"w"); for(i=0;i<n;i++) //按格式写入文件 fprintf(p2,"%-10s%-23s%-18s%-8d%-15s%-4d\n",dictList[i].ISBN,dictList[i].book,dictList[i].author,dictList[i].edition,dictList[i].press,dictList[i].year); fclose(p2); printf("写入成功!\n"); } void Display_main_menu() //显示菜单,另外添加了三个功效,显示菜单,清屏,暂停 { printf("------------------------------\n1.Input records\n2.Display All Records\n3.Delete a Record\n4.sort\n5.Insert a Record\n6.Query\n7.Add Records from a Text File\n8.Write to a Text File\n9.Change a record\n0.Quit\n\nTIPS\ta.Menu\n\tb.Clear Screen\n\tc.Pause\n------------------------------\nGive your choice:\n"); } void Change_a_record(Bookinfo dictList[],int n)//修改某一统计值 { int i; char book[30],ISBN[30],c; c=getchar(); printf("请输入待修改图书书名\n"); gets(book); if((i=Query(dictList,n,book))>0)//确定找到待修改统计 { printf("共找到%d条统计\n请输入待修改图书书号\n",i); gets(ISBN); for(i=0;i<n;i++) { if(!strcmp(dictList[i].ISBN,ISBN)) { printf("请更新书号为%s图书数据\n",ISBN);//开始修改 printf("Please input ISBN:\n"); gets(dictList[i].ISBN); printf("Please input book:\n"); gets(dictList[i].book); printf("Please input author:\n"); gets(dictList[i].author); printf("Please input press:\n"); gets(dictList[i].press); printf("Please input edition:\n"); scanf("%d",&dictList[i].edition); printf("Please input year:\n"); scanf("%d",&dictList[i].year); printf("修改完成!\n"); } } } else printf("未找到相关统计\n"); } main() { static int n=12; char filename1[30],filename2[30],c; //创建初始结构体数组,应不少于十个 Bookinfo books[NUM]={ {"97814842","python Language","gnus Lie land",2,"Berkeley",}, {"97871190","history of Chinese","Goa qua",2,"Beijing",}, {"97814129","public communication","Ronald E.Rice",3,"London",}, {"97836422","cultural composition","Yang Pan",2,"pardon",}, {"97801240","analyzing the social","Jennifer beck",1,"Walt",}, {"78016958","recored servicing","Scottish Qua",1,"Chinese",}, {"01354851","management guide","Ferdinand K. Levy",1,"Englewood",1969}, {"1096-424","macroeconomics","Dusk ",2,"Gog",1977}, {"04448649","competitive economics","Ki Hang Kim",2,"Amsterdam",1983}, {"08531419","guide to banking","Robin Pr",7,"London",1973}, {"01311606","guide to banking","Jerry S.Rosen",2,"Englewood",1972}, {"97875100","dirt pricing dynamic","Pamela La",1,"World book",}}; Display_main_menu(); //显示菜单 while(c=getchar()) //连续获取输入,并用switch语句调用对应函数 { switch(c) { case '0':exit(1);break; case '1':n=Input(books,n);break; case '2':Display(books,n);break; case '3':n=Delete_a_record(books,n);break; case '4':Sort_by_name(books,n);break; case '5':n=Insert_a_record(books,n);break; case '6':Query_a_record(books,n);break; case '7': printf("请输入文件名\n"); scanf("%s",filename1); n=AddfromText(books,n,filename1); break; case '8': printf("请输入文件名\n"); scanf("%s",filename2); WritetoText(books,n,filename2); break; case '9':Change_a_record(books,n);break; case 'a':Display_main_menu();break; case 'b':system("cls");break; case 'c':system("pause");break; } } } 六:程序实施(包含经典测试数据) ------------------------------ 1.Input records 2.Display All Records 3.Delete a Record 4.sort 5.Insert a Record 6.Query 7.Add Records from a Text File 8.Write to a Text File 9.Change a record 0.Quit TIPS a.Menu b.Clear Screen c.Pause ------------------------------ Give your choice: à1 Please input ISBN: à4296 Please input book: à明朝那些事 Please input author: à当年明月 Please input press: à浙江出版社 Please input edition: à2 Please input year: à 是否输入下一条?确定(y)|取消(n) àn à2 ISBN book author edition press year 97814842 python Language gnus Lie land 2 Berkeley 97871190 history of Chinese Goa qua 2 Beijing 97814129 public communication Ronald E.Rice 3 London 97836422 cultural composition Yang Pan 2 pardon 97801240 analyzing the social Jennifer beck 1 Walt 78016958 recored servicing Scottish Qua 1 Chinese 01354851 management guide Ferdinand K. Levy 1 Englewood 1969 1096-424 macroeconomics Dusk 2 Gog 1977 04448649 competitive economics Ki Hang Kim 2 Amsterdam 1983 08531419 guide to banking Robin Pr 7 London 1973 à<Enter> 01311606 guide to banking Jerry S.Rosen 2 Englewood 1972 97875100 dirt pricing dynamic Pamela La 1 World book 4296 明朝那些事当年明月 2 浙江出版社 à3 请输入待删除书目标书名 à明朝那些事 ISBN book author edition press year 4296 明朝那些事当年明月 2 浙江出版社 请输入待删除书目标书号 à4296 确实要删除该统计?是(y)|否(n) ày 删除成功! à4 à2 ISBN book author edition press year 97801240 analyzing the social Jennifer beck 1 Walt 04448649 competitive economics Ki Hang Kim 2 Amsterdam 1983 97836422 cultural composition Yang Pan 2 pardon 97875100 dirt pricing dynamic Pamela La 1 World book 08531419 guide to banking Robin Pr 7 London 1973 01311606 guide to banking Jerry S.Rosen 2 Englewood 1972 97871190 history of Chinese Goa qua 2 Beijing 1096-424 macroeconomics Dusk 2 Gog 1977 01354851 management guide Ferdinand K. Levy 1 Englewood 1969 97814129 public communication Ronald E.Rice 3 London à<Enter> 97814842 python Language gnus Lie land 2 Berkeley 78016958 recored servicing Scottish Qua 1 Chinese à5 Please input ISBN: à84772281 Please input book: àenglish learning Please input author: àtom Please input press: àAlla Please input edition: à2 Please input year: à 插入成功! à6 请输入待查找书名 àrecored servicing ISBN book author edition press year 78016958 recored servicing Scottish Qua 1 Chinese 共找到1条统计 à7 请输入文件名 àDictory.txt 读取成功! à2 ISBN b- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 方案 报告 菜单 源码 测试
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文