收藏 分销(赏)

C语言程序设计方案报告菜单源码测试.docx

上传人:a199****6536 文档编号:2993162 上传时间:2024-06-12 格式:DOCX 页数:22 大小:35.67KB 下载积分:10 金币
下载 相关 举报
C语言程序设计方案报告菜单源码测试.docx_第1页
第1页 / 共22页
C语言程序设计方案报告菜单源码测试.docx_第2页
第2页 / 共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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服