课程设计例程.docx
- 文档编号:10615522
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:33
- 大小:24.43KB
课程设计例程.docx
《课程设计例程.docx》由会员分享,可在线阅读,更多相关《课程设计例程.docx(33页珍藏版)》请在冰豆网上搜索。
课程设计例程
/*下面是一个在VC++中调试通过的用结构体数组实现的信息管理程序,调试过程中,对TC下运行的程序主要进行了如下修改:
1.clrscr();函数不被VC识别,将其替换为system("cls");同时需要在前面增加#include
2.gotoxy();函数不被VC识别,在程序最后增加了一个VC下写的自定义函数voidgotoxy(intx,inty),同时将其函数声明放在程序前面的自定义函数声明部分
3.getch();函数不被VC识别,改为getchar();
*/
/******头文件(.h)***********/
#include"stdio.h"/*I/O函数*/
#include"stdlib.h"/*标准库函数*/
#include"string.h"/*字符串函数*/
#include"ctype.h"/*字符操作函数*/
#include
#defineM50/*定义常数表示记录数*/
typedefstruct/*定义数据结构*/
{
charname[20];/*姓名*/
charunits[30];/*单位*/
chartele[10];/*电话*/
}ADDRESS;
intenter(ADDRESSt[]);/*输入记录*/
voidlist(ADDRESSt[],intn);/*显示记录*/
voidsearch(ADDRESSt[],intn);/*按姓名查找显示记录*/
intdele(ADDRESSt[],intn);/*删除记录*/
intadd(ADDRESSt[],intn);/*插入记录*/
voidsave(ADDRESSt[],intn);/*记录保存为文件*/
intload(ADDRESSt[]);/*从文件中读记录*/
voiddisplay(ADDRESSt[]);/*按序号查找显示记录*/
voidsort(ADDRESSt[],intn);/*按姓名排序*/
voidqseek(ADDRESSt[],intn);/*快速查找记录*/
voidcopy();/*文件复制*/
voidprint(ADDRESStemp);/*显示单条记录*/
intfind(ADDRESSt[],intn,char*s);/*查找函数*/
intmenu_select();/*主菜单函数*/
voidgotoxy(intx,inty);
/******主函数开始*******/
voidmain()
{
ADDRESSadr[M];/*定义结构体数组*/
intlength;/*保存记录长度*/
system("cls");/*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{
case0:
length=enter(adr);break;/*输入记录*/
case1:
list(adr,length);break;/*显示全部记录*/
case2:
search(adr,length);break;/*查找记录*/
case3:
length=dele(adr,length);break;/*删除记录*/
case4:
length=add(adr,length);break;/*插入记录*/
case5:
save(adr,length);break;/*保存文件*/
case6:
length=load(adr);break;/*读文件*/
case7:
display(adr);break;/*按序号显示记录*/
case8:
sort(adr,length);break;/*按姓名排序*/
case9:
qseek(adr,length);break;/*快速查找记录*/
case10:
copy();break;/*复制文件*/
case11:
exit(0);/*如返回值为11则程序结束*/
}
}
}
menu_select()
{chars[80];
intc;
gotoxy(1,25);/*将光标定为在第25行,第1列*/
printf("pressanykeyentermenu......\n");/*提示压任意键继续*/
getchar();/*读入任意字符*/
system("cls");/*清屏*/
gotoxy(1,1);
printf("***************MENU*********************\n\n");
printf("0.Enterrecord\n");
printf("1.Listthefile\n");
printf("2.Searchrecordonname\n");
printf("3.Deletearecord\n");
printf("4.addrecord\n");
printf("5.Savethefile\n");
printf("6.Loadthefile\n");
printf("7.displayrecordonorder\n");
printf("8.sorttomakenewfile\n");
printf("9.Quickseekrecord\n");
printf("10.copythefiletonewfile\n");
printf("11.Quit\n");
printf("********************************************\n");
do{printf("\nEnteryouchoice(0~11):
");/*提示输入选项*/
scanf("%s",s);/*输入选择项*/
c=atoi(s);/*将输入的字符串转化为整型数*/
}while(c<0||c>11);/*选择项不在0~11之间重输*/
returnc;/*返回选择项,主程序根据该数调用相应的函数*/}
/*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
intenter(ADDRESSt[]){
inti,n;
system("cls");/*清屏*/
printf("\npleaseinputnum\n");/*提示信息*/
scanf("%d",&n);/*输入记录数*/
printf("pleaseinputrecord\n");/*提示输入记录*/
printf("nameunittelephone\n");
printf("------------------------------------------------\n");
for(i=0;i { scanf("%s%s%s",t[i].name,t[i].units,t[i].tele);/*输入记录*/ printf("----------------------------------------------\n"); } returnn;/*返回记录条数*/ } /*显示记录,参数为记录数组和记录条数*/ voidlist(ADDRESSt[],intn) {inti; system("cls");printf("\n\n****************ADDRESS***************\n"); printf("nameunittelephone\n"); printf("------------------------------------------------\n"); for(i=0;i printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele); if((i+1)%10==0)/*判断输出是否达到10条记录*/ { printf("Pressanykeycontinue...\n");/*提示信息*/ getchar();/*压任意键继续*/ } printf("*********************end*******************\n"); } /*查找记录*/ voidsearch(ADDRESSt[],intn) { chars[20];/*保存待查找姓名字符串*/ inti;/*保存查找到结点的序号*/ system("cls");/*清屏*/ printf("pleasesearchname\n"); scanf("%s",s);/*输入待查找姓名*/ i=find(t,n,s);/*调用find函数,得到一个整数*/ if(i>n-1)/*如果整数i值大于n-1,说明没找到*/ printf("notfound\n"); else print(t[i]);/*找到,调用显示函数显示记录*/ } /*显示指定的一条记录*/ voidprint(ADDRESStemp) { system("cls"); printf("\n\n***************************************\n"); printf("nameunittelephone\n"); printf("------------------------------------------------\n"); printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele); printf("*******************end********************\n"); } /*查找函数,参数为记录数组和记录条数以及姓名s*/ intfind(ADDRESSt[],intn,char*s) { inti; for(i=0;i { if(strcmp(s,t[i].name)==0)/*记录中的姓名和待比较的姓名是否相等*/ returni;/*相等,则返回该记录的下标号,程序提前结结束*/ } returni;/*返回i值*/ } /*删除函数,参数为记录数组和记录条数*/ intdele(ADDRESSt[],intn) { chars[20];/*要删除记录的姓名*/ intch=0; inti,j; printf("pleasedeletedname\n");/*提示信息*/ scanf("%s",s);/*输入姓名*/ i=find(t,n,s);/*调用find函数*/ if(i>n-1)/*如果i>n-1超过了数组的长度*/ printf("nofoundnotdeleted\n");/*显示没找到要删除的记录*/ else { print(t[i]);/*调用输出函数显示该条记录信息*/ printf("Areyousuredeleteit(1/0)\n");/*确认是否要删除*/ scanf("%d",&ch);/*输入一个整数0或1*/ if(ch==1)/*如果确认删除整数为1*/ { for(j=i+1;j { strcpy(t[j-1].name,t[j].name);/*将后一条记录的姓名拷贝到前一条*/ strcpy(t[j-1].units,t[j].units);/*将后一条记录的单位拷贝到前一条*/ strcpy(t[j-1].tele,t[j].tele);/*将后一条记录的电话拷贝到前一条*/ } n--;/*记录数减1*/ }} returnn;/*返回记录数*/} /*插入记录函数,参数为结构体数组和记录数*/ intadd(ADDRESSt[],intn)/*插入函数,参数为结构体数组和记录数*/ { ADDRESStemp;/*新插入记录信息*/ inti,j; chars[20];/*确定插入在哪个记录之前*/ printf("pleaseinputrecord\n"); printf("********************************************\n"); printf("nameunittelephone\n"); printf("--------------------------------------------------\n"); scanf("%s%s%s",temp.name,temp.units,temp.tele);/*输入插入信息*/ printf("------------------------------------------------\n"); printf("pleaseinputlocatename\n"); scanf("%s",s);/*输入插入位置的姓名*/ i=find(t,n,s);/*调用find,确定插入位置*/ for(j=n-1;j>=i;j--)/*从最后一个结点开始向后移动一条*/ { strcpy(t[j+1].name,t[j].name);/*当前记录的姓名拷贝到后一条*/ strcpy(t[j+1].units,t[j].units);/*当前记录的单位拷贝到后一条*/ strcpy(t[j+1].tele,t[j].tele);/*当前记录的电话拷贝到后一条*/ } strcpy(t[i].name,temp.name);/*将新插入记录的姓名拷贝到第i个位置*/ strcpy(t[i].units,temp.units);/*将新插入记录的单位拷贝到第i个位置*/ strcpy(t[i].tele,temp.tele);/*将新插入记录的电话拷贝到第i个位置*/ n++;/*记录数加1*/ returnn;/*返回记录数*/} /*保存函数,参数为结构体数组和记录数*/ voidsave(ADDRESSt[],intn) { inti; FILE*fp;/*指向文件的指针*/、 if((fp=fopen("record.txt","wb"))==NULL)/*打开文件*/ { printf("cannotopenfile\n");/*没打开*/ exit (1);/*退出*/ } printf("\nSavingfile\n");/*输出提示信息*/ fprintf(fp,"%d",n);/*将记录数写入文件*/ fprintf(fp,"\r\n");/*将换行符号写入文件*/ for(i=0;i { fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);fprintf(fp,"\r\n");/*将换行符号写入文件*/ } fclose(fp);/*关闭文件*/ printf("****savesuccess***\n");/*显示保存成功*/ } /*读入函数,参数为结构体数组*/ intload(ADDRESSt[]) {inti,n; FILE*fp;/*指向文件的指针*/ if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/ {printf("cannotopenfile\n");/*不能打开*/ exit (1);/*退出*/ } fscanf(fp,"%d",&n);/*读入记录数*/ for(i=0;i fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele);/*按格式读入记录*/ fclose(fp);/*关闭文件*/ printf("Youhavesuccessreaddatafromfile! ! ! \n");returnn;/*返回记录数*/ } /*按序号显示记录函数*/ voiddisplay(ADDRESSt[]) { intid,n; FILE*fp;/*指向文件的指针*/ if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/ {printf("cannotopenfile\n");/*不能打开文件*/ exit (1);/*退出*/ } printf("Enterordernumber...\n");/*显示信息*/ scanf("%d",&id);/*输入序号*/ fscanf(fp,"%d",&n);/*从文件读入记录数*/ if(id>=0&&id { fseek(fp,(id-1)*sizeof(ADDRESS),1);/*移动文件指针到该记录位置*/ print(t[id]);/*调用输出函数显示该记录*/ printf("\r\n"); } else printf("no%dnumberrecord! ! ! \n",id);/*如果序号不合理显示信息*/ fclose(fp);/*关闭文件*/ } /*排序函数,参数为结构体数组和记录数*/ voidsort(ADDRESSt[],intn) { inti,j,flag; ADDRESStemp;/*临时变量做交换数据用*/ for(i=0;i { flag=0;/*设标志判断是否发生过交换*/ for(j=0;j if((strcmp(t[j].name,t[j+1].name))>0)/*比较大小*/ { flag=1; strcpy(temp.name,t[j].name);/*交换记录*/ strcpy(temp.units,t[j].units); strcpy(temp.tele,t[j].tele); strcpy(t[j].name,t[j+1].name); strcpy(t[j].units,t[j+1].units); strcpy(t[j].tele,t[j+1].tele); strcpy(t[j+1].name,temp.name); strcpy(t[j+1].units,temp.units); strcpy(t[j+1].tele,temp.tele); } if(flag==0)break;/*如果标志为0,说明没有发生过交换循环结束*/ } printf("sortsucess! ! ! \n");/*显示排序成功*/ } /*快速查找,参数为结构体数组和记录数*/ voidqseek(ADDRESSt[],intn) { chars[20]; intl,r,m; printf("\nPleasesortbeforeqseek! \n");/*提示确认在查找之前,记录是否已排序*/ printf("pleaseenternameforqseek\n");/*提示输入*/ scanf("%s",s);/*输入待查找的姓名*/ l=0;r=n-1;/*设置左边界与右边界的初值*/ while(l<=r)/*当左边界<=右边界时*/ { m=(l+r)/2;/*计算中间位置*/ if(strcmp(t[m].name,s)==0)/*与中间结点姓名字段做比较判是否相等*/ { print(t[m]);/*如果相等,则调用print函数显示记录信息*/ return;/*返回*/ } if(strcmp(t[m].name,s)<0)/*如果中间结点小*/ l=m+1;/*修改左边界*/ else r=m-1;/*否则,中间结点大,修改右边界*/ } if(l>r)/*如果左边界大于右边界时*/ printf("notfound\n");/*显示没找到*/ } /*复制文件*/ voidcopy() {charoutfile[20];/*目标文件名*/ inti,n; ADDRESStemp[M];/*定义临时变量*/ FILE*sfp,*tfp;/*定义指向文件的指针*/ system("cls");/*清屏*/ if((sfp=fopen("record.txt","rb"))==NULL)/*打开记录文件*/ {printf("cannotopenfile\n");/*显示不能打开文件信息*/ exit (1);/*退出*/} printf("Enteroutfilename,forexamplec: \\f1\\te.txt: \n"); /*提示信息*/ scanf("%s",outfile);/*输入目标文件名*/ if((tfp=fopen(outfile,"wb"))==NULL)/*打开目标文件*/ {printf("cannotopenfile\n");/*显示不能打开文件信息*/ exit (1);/*退出*/} fscanf(sfp,"%d",&n);/*读出文件记录数*/ fprintf(tfp,"%d",n);/*写入目标文件数*/ fprintf(tfp,"\r\n");/*写入换行符*/ for(i=0;i { fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units, temp[i].tele);/*读入记录*/ fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name, temp[i].units,temp[i].tele);/*写入记录*/ fprintf(tfp,"\r\n");/*写入换行符*/ }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 例程