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

上传人:b****4 文档编号:3771137 上传时间:2022-11-25 格式:DOCX 页数:20 大小:58.45KB
下载 相关 举报
C语言程序设计报告菜单+源码+测试.docx_第1页
第1页 / 共20页
C语言程序设计报告菜单+源码+测试.docx_第2页
第2页 / 共20页
C语言程序设计报告菜单+源码+测试.docx_第3页
第3页 / 共20页
C语言程序设计报告菜单+源码+测试.docx_第4页
第4页 / 共20页
C语言程序设计报告菜单+源码+测试.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计报告菜单+源码+测试.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告菜单+源码+测试.docx(20页珍藏版)》请在冰豆网上搜索。

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

C语言程序设计报告菜单+源码+测试

一:

系统功能

基本功能:

图书的录入,删除,查找,和导入导出等。

图书属性:

书号,书名,第一作者,版次,出版年等。

菜单功能:

1.InputRecords(输入若干条记录)

从键盘一次输入一本书的信息,存放到结构体数组中,然后显示。

提示信息,确认是否输入下一条记录。

2.DisplayAllRecords(显示所有记录)

按顺序显示所有记录,每屏显示10条记录,按键继续显示下一屏。

3.DeleteaRecord(按书名查找,删除一本书)

输入待删除书的书名,显示该书名的所有书目,提示输入待删除书目的书号,提示是否删除,确认后,删除该书。

4.Sort(排序)

以书名为升序排列数组

5.Insertarecord(插入一条记录)

以书名为序排列的数组中插入一条记录,插入后,数组仍然有序。

输出插入成功后的信息。

6.Query(查找并显示一个记录)

输入书名,查找并显示包含该书名的所有图书信息

7.AddRecordsfromaTextFile(从文件读入图书信息到结构体数组中)

用户可事先建立一个文本文件Dictory.txt。

存放所有图书信息,文件格式如下:

2

1182高等数学刘浩荣5同济大学出版社2013

7300物理化学王德明2化学工业出版社2015

8.WritetoaTextFile

将数组中的全部记录写入文件Records.txt中,要求格式与Dictory.txt相同。

1.Quit(退出图书管理系统)

新增加菜单功能:

9.Changearecord

修改某一条记录的值

a.Menu

显示菜单

b.ClearScreen

清屏

c.Pause

按暂停,按任意键继续

二:

数据结构

Typedefstruct

{

charISBN[10];//书号

charbook[30];//书名

charauthor[20];//作者

Intedition;//版本号

charpress[50];//出版社名

intyear;//出版年

}Bookinfo;

 

三:

函数调用关系

四:

主要算法及实现

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;

插入算法

排序算法

b=strcmp(dictList[p].book,dictList[j].book)

语句A:

t=dictList[p];

dictList[p]=dictList[i];

dictList[i]=t;

五:

源程序(含注释)

#include

#include

#include

#defineNUM100

typedefstruct//定义结构体数组

{

charISBN[10];//书号

charbook[30];//书名

charauthor[20];//作者

intedition;//版本号

charpress[50];//出版社名

intyear;//出版年

}Bookinfo;

intInput(BookinfodictList[],intn)//从键盘输入数据,存入结构体数组dictList

{

charc1,c2;

do{

c1=getchar();

printf("PleaseinputISBN:

\n");

gets(dictList[n].ISBN);

printf("Pleaseinputbook:

\n");

gets(dictList[n].book);

printf("Pleaseinputauthor:

\n");

gets(dictList[n].author);

printf("Pleaseinputpress:

\n");

gets(dictList[n].press);

printf("Pleaseinputedition:

\n");

scanf("%d",&dictList[n].edition);

printf("Pleaseinputyear:

\n");

scanf("%d",&dictList[n].year);

n+=1;

printf("是否输入下一条?

确认(y)|取消(n)\n");//提示信息

c1=getchar();

}while((c2=getchar())=='y');

return(n);//返回值为新的记录数量

}

voidDisplay(BookinfodictList[],intn)//显示所有记录,每10个暂停一次,输入回车继续显示

{

inti=0,j;

charinput,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

if(i==n)break;//若数据全部输出,则跳出循环,

scanf("%c",&input);

}while(input=='\n');//输入回车,执行循环

}

intdelete(BookinfodictList[],intn,char*ISBN)//只删除书号为ISBN的第一条记录

{

inti,j;

for(i=0;i

{

if(!

strcmp(dictList[i].ISBN,ISBN))//strcmp()函数判断两个字符串是否相等

{

for(j=i;j

dictList[j]=dictList[j+1];//将目标值右面的数据全部左移一位

return(n-1);//删除后记录数减少1

}

}

return(n);

}

intDelete_a_record(BookinfodictList[],intn)//删除某一条记录

{

inti,j=0;

charbook[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

{

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

{

if(!

strcmp(dictList[i].ISBN,isbn))

{

//调用delete函数删除

printf("删除成功!

\n");

return(delete(dictList,n,dictList[i].ISBN));

}

}

printf("未找到待删除记录!

\n");

//删除成功后记录减1

}

else

{

printf("已取消删除!

\n");//取消删除后记录数不变

returnn;

}

}else

printf("未找到待删除记录!

\n");

}

voidSort_by_name(BookinfodictList[],intn)//选择法按书名升序排列

{

inti,j,p;

Bookinfot;

for(i=0;i

{

p=i;

for(j=i+1;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;

}

}

}

intinsert(BookinfodictList[],intn,Bookinfo*s)//按书名顺序插入记录

{

inti,j;

Sort_by_name(dictList,n);

for(i=0;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);

}

elseif(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);

}

intInsert_a_record(BookinfodictList[],intn)//出现问题,调用该函数时总是全部显示记录?

{

intk;

charc;

Bookinfos;

//输入数据

c=getchar();

printf("PleaseinputISBN:

\n");

gets(s.ISBN);

printf("Pleaseinputbook:

\n");

gets(s.book);

printf("Pleaseinputauthor:

\n");

gets(s.author);

printf("Pleaseinputpress:

\n");

gets(s.press);

printf("Pleaseinputedition:

\n");

scanf("%d",&s.edition);

printf("Pleaseinputyear:

\n");

scanf("%d",&s.year);

k=insert(dictList,n,&s);//根据insert的返回值是否大于n判断插入成功与否

if(k>n)

{

printf("插入成功!

\n");

return(k);

}

else

{

printf("插入失败!

\n");

return(n);

}

}

intQuery(BookinfodictList[],intn,char*book)//查询并显示书名为book的记录

{

inti,count=0;

printf("%-10s%-23s%-18s%-8s%-15s%-4s\n","ISBN","book","author","edition","press","year");

for(i=0;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)

returncount;//查询成功,返回个数

else

return-1;//未找到,返回-1

}

voidQuery_a_record(BookinfodictList[],intn)

{

inti;

charbook[30],c;

c=getchar();

printf("请输入待查找的书名\n");//输入书名

gets(book);

if((i=Query(dictList,n,book))>0)printf("共找到%d条记录\n",i);//若查到数据,Query函数的返回值为正数

elseprintf("未找到所查找的记录\n");

}

intAddfromText(BookinfodictList[],intn,char*filename)

{

inti;

Bookinfos;

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);

}

voidWritetoText(BookinfodictList[],intn,char*filename)

{

FILE*p2;

inti;

p2=fopen(filename,"w");

for(i=0;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");

}

voidDisplay_main_menu()//显示菜单,另外添加了三个功能,显示菜单,清屏,暂停

{

printf("------------------------------\n1.Inputrecords\n2.DisplayAllRecords\n3.DeleteaRecord\n4.sort\n5.InsertaRecord\n6.Query\n7.AddRecordsfromaTextFile\n8.WritetoaTextFile\n9.Changearecord\n0.Quit\n\nTIPS\ta.Menu\n\tb.ClearScreen\n\tc.Pause\n------------------------------\nGiveyourchoice:

\n");

}

voidChange_a_record(BookinfodictList[],intn)//修改某一记录的值

{

inti;

charbook[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

{

if(!

strcmp(dictList[i].ISBN,ISBN))

{

printf("请更新书号为%s的图书数据\n",ISBN);//开始修改

printf("PleaseinputISBN:

\n");

gets(dictList[i].ISBN);

printf("Pleaseinputbook:

\n");

gets(dictList[i].book);

printf("Pleaseinputauthor:

\n");

gets(dictList[i].author);

printf("Pleaseinputpress:

\n");

gets(dictList[i].press);

printf("Pleaseinputedition:

\n");

scanf("%d",&dictList[i].edition);

printf("Pleaseinputyear:

\n");

scanf("%d",&dictList[i].year);

printf("修改完成!

\n");

}

}

}

elseprintf("未找到相关记录\n");

}

main()

{

staticintn=12;

charfilename1[30],filename2[30],c;

//创建初始结构体数组,应不少于十个

Bookinfobooks[NUM]={

{"97814842","pythonLanguage","gnusLieland",2,"Berkeley",2014},

{"97871190","historyofChinese","Goaqua",2,"Beijing",2009},

{"97814129","publiccommunication","RonaldE.Rice",3,"London",2013},

{"97836422","culturalcomposition","YangPan",2,"pardon",2012},

{"97801240","analyzingthesocial","Jenniferbeck",1,"Walt",2013},

{"78016958","recoredservicing","ScottishQua",1,"Chinese",2004},

{"01354851","managementguide","FerdinandK.Levy",1,"Englewood",1969},

{"1096-424","macroeconomics","Dusk",2,"Gog",1977},

{"04448649","competitiveeconomics","KiHangKim",2,"Amsterdam",1983},

{"08531419","guidetobanking","RobinPr",7,"London",1973},

{"01311606","guidetobanking","JerryS.Rosen",2,"Englewood",1972},

{"97875100","dirtpricingdynamic","PamelaLa",1,"Worldbook",2013}};

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.Inputrecords

2.DisplayAllRecords

3.DeleteaRecord

4.sort

5.InsertaRecord

6.Query

7.AddRecordsfromaTextFile

8.WritetoaTextFile

9.Changearecord

0.Quit

TIPSa.Menu

b.ClearScreen

c.Pause

------------------------------

Giveyourchoice:

1

PleaseinputISBN:

4296

Pleaseinputbook:

明朝那些事

Pleaseinputauthor:

当年明月

Pleaseinputpress

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1