求一个C语言课程设计

要交作业,求一个C语言课程设计
具体内容
1,任务与具体要求
2,设计说明书包括的内容
3,程序源代码(中间不要有汉字注释,并且要能在TurboC中成功运行)
4,心得体会
5,主要的参考文献

我把我仅有的六十分中的五十分拿出来了 当报酬

谢谢额

第一部分、课程设计的题目与要求
1、 问题的提出
小型图书借阅管理系统的设计。
实现查询和显示功能,可办理借书和还书手续,同时可查询学生所借图书的信息。
2、 功能要求
实现查询和显示功能:按书名查询、按作者名查询和显示图书库存信息。将满足查询条件的整条记录显示在屏幕上。
办理借阅手续:输入学生号,如果不存在于第二个文本文件中,则不能办理借阅,否则,继续输入要借阅的书名,如果在图书信息中存在该书,且未被借出,则可以办理借阅手续,并修改该书的存在状态标志,登记借阅人学号和学生的借阅本数,并修改相应的文本文件。
办理还书手续:输入学生学号,判断其是否有借书。如有借书,则输入书名,判断该书是否被借出,将图书的存在状态标记为1,还书成功,并修改学生的借阅本数。同时修改相应的文本文件。
查询学生所借图书的信息。数据显示效果如下:
学号 2008002 姓名 李四 专业 英语
图书编号 书名 作者 单价
bk001 C语言 谭浩强 35.00
bk009 数据结构 严蔚敏 22.00

第二部分、课程设计题目功能
1、 系统功能模块框图设计

2、数据结构说明
struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组

struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组

char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息

void read1()
{
FILE *fp; //定义一个文件指针变量,指向图书文本
……
}
void read1()
{
FILE *fp; //定义一个文件指针变量,指向学生文本
……
}
void find_author()
{
char author[10]; //定义一个字符数组,用来存放键入的作者名
……
}
void find_bkname()
{
char bkname[10]; //定义一个字符数组,用来存放键入的图书名
……
}
void booklend()
{
FILE *fp1,*fp2; //定义二个文件指针变量,分别指向图书文本和学生文本
char stunumber[10],bkname[30]; //定义二个字符数组,分别用来存放键入的学生学号和书名
……
}

2、 详细设计

程序开始运行后先执行函数main(),函数void read1()从图书文本中读出数据保存到结构体数组bk[M]中,同时输出在屏幕上,通过调用函数read2()从stu文本中读出数据保存到结构体数组stu[N],同时输出在屏幕上。通过while循环与switch(i)语句来实现功能的选择。通过键入i来调用函数:
当i=1时,调用函数void find_author();
当i=2时,调用函数void find_bkname();
当i=3时,调用函数void find_others();
当i=4时,调用函数void booklend();
当i=5时,调用函数void bookreturn();
当i=6时,调用函数void find_stu();
函数void read1()从bk文本中读出数据保存到结构体数组bk[M]中,同时读取的信息输出在屏幕上。

函数void read2()从stu文本中读出数据保存到结构体数组stu[N],同时读取的信息输出在屏幕上。

函数void find_author(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的作者名与结构体成员—作者名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一作者名,与结构体成员author比较,若相同则输出到屏幕。

函数void find_bkname(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的书名与结构体成员—书名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一书名,与结构体成员bkname比较,若相同则输出到屏幕。

函数void find_others(),该函数的返回值为空,作用是从结构体数组bk[M]中查找满足条件(结构体成员—存在状态为零),将满足条件的bk[i],输出到屏幕上。具体,通过if语言判断结构体成员flag,若值为1,则输出到屏幕。

函数void booklend(),该函数返回值为空,作用是借书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理借书手续,同时修改后的信息写入文本中。

具体流程图如下图:
函数void bookreturn(),该函数返回值为空,作用是还书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理还书手续,同时修改后的信息写入文本中。
具体流程图如下图:

函数void find_stu(),该函数返回值为空,作用时查询学生借阅图书的信息。具体,键入一个学号,通过循环与结构体数组bk[i].readnu比较,若相同则输出。
3、 调试与测试

原始数据文件:

图书编号 书名 作者 单价 存在状态 借阅人学号
bk001 C语言 谭浩强 35.00 1 无
bk002 寻觅中华 余秋雨 40.00 1 无
bk003 C语言 谭浩强 35.00 1 无
bk004 C++程序设计 谭浩强 36.00 1 无
bk005 文化苦旅 余秋雨 22.00 1 无
bk006 牛津简明英语词典 Thompson 119.00 1 无
bk007 Oracle基础教程 佩里 65.00 1 无
bk008 C语言 李春葆 39.00 1 无
bk009 数据结构 严蔚敏 22.00 1 无
bk010 大学化学 何培之 30.00 1 无
bk011 C语言程序设计 杜友福 28.00 1 无
bk012 大学英语 郑数昙 23.90 1 无
bk013 高等数学 刘修生 12.00 1 无
bk014 电路与模拟电子技术 高玉良 25.50 1 无
bk015 大学英语语法 张道真 29.00 1 无

学号 姓名 专业 借阅本数
2008001 张三 计算机 0
2008002 李四 英语 0
2008003 赵晓云 计算机 0
2008004 Mary 机械 0
2008005 王楠 电信 0
2008006 周诗维 计算机 0
2008007 张腾 石油 0
2008008 李俊杰 石油 0
2008009 刘杰 机械 0
2008010 王飞 城建 0

测试功能1(按作者名查询):效果如下图
查找作者为谭浩强的图书

测试功能2(按书名查询):效果如下图
查找图书名为电路与模拟电子技术的图书

测试功能3(输出库存图书信息):效果如下图

测试功能4(借书):效果如下图
学号为2008009的学生需要借阅电路与模拟电子技术

测试功能6(显示学生所借图书信息):如图所示
显示学号为2008009的学生所借图书信息

测试功能5(还书):效果如下图
学号为2008009的学生需要还电路与模拟电子技术

执行功能2时,提示内存错误。原因是子函数find_bkname()中定义的字符数组bkname[10]长度不够,改成bkname[30]即可。
执行功能5后,借阅本书都变成地址值。原因是在子函数bookreturn()中输出语句printf()中的‘输出项表列中stu[i].borrow’前加了取地址运算符,去掉该地址运算符即可。
执行功能4后,图书文本中所有数据全都填到了一列上。原因是在子函数book_lend()的fprintf()中格式控制字符串后少了换行。
在程序运行过程中,还出现以下需要注意的错误:if语句条件表达式中应使用逻辑等于(==);可能漏写分号;写程序时应注意输入法切换,正确输入字符。

第三部分、课程设计总结
在本次实训中,我有很多收获。自己对课本知识上的小的知识点把握不够,在这次实训中很多错误都是一些小问题,只要写程序的时候注意点就可以避免,以后写程序时一定会注意。遇到了困难,首先自己找,实在不能解决的话就请教老师和同学。其实很多问题都是我们自己可以解决的,只要我们用心去找,同时相信自己能解决问题。我在这次实训中学会了调试程序,这个功能是我以前所不知道。
对于这个系统,因为它的简单,所以存在不足之处,我就一个方面谈谈我的设想。通过在函数中加条件语句,限制每个人的借书本书,所借图书的总金额。

附录 程序清单
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 15
#define N 10

struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组

struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组

char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息

//读出图书信息
void read1()
{
FILE *fp;
int i;
if((fp=fopen("D:\\jz80243_bk.txt","r"))==NULL)
{printf("can not open file");
exit(0);
}

fgets(str1,81,fp);
puts(str1);

for(i=0;i<M;i++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%f%d%s",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,&bk[i].price,&bk[i].flag,bk[i].readnu);
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp);
}
//读出学生信息
void read2()
{
FILE *fp;
int j;

if((fp=fopen("D:\\jz80243_stu.txt","r"))==NULL)
{printf("can not open file");
exit(0);
}

fgets(str2,81,fp);
puts(str2);

for(j=0;j<N;j++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%d",stu[j].stunum,stu[j].stuname,stu[j].spe,&stu[j].borrow);
printf("%-15s%-16s%-18s%-8d\n",stu[j].stunum,stu[j].stuname,stu[j].spe,stu[j].borrow);
}
fclose(fp);

}
//按作者查询
void find_author()
{
char author[10];
int i;

printf("请输入作者名:");
scanf("%s",author);
puts(str1);

for(i=0;i<M;i++)
if(strcmp(author,bk[i].bkauthor)==0) //将输入的作者名与结构体数组中的作者名比较
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//按书名查询
void find_bkname()
{
char bkname[30];
int i;
printf("请输入书名:");
scanf("%s",bkname);
puts(str1);

for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0) //将输入的书名与结构体数组中的书名比较
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//输出库存图书信息
void find_other()
{ int i;
for(i=0;i<M;i++)
if(bk[i].flag==1) //判断图书是否在库
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//借书
void booklend()
{
FILE *fp1,*fp2;
char stunumber[10],bkname[30];
int i,t;
printf("input the studentsnu:");
scanf("%s",stunumber);

for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
{t=i;break;}
if(i==N) //输入的学号不在文件2中,不能借书
{ printf("NO find!Can't lend!\n");
return;
}

printf("input the bookname:");
scanf("%s",bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0 && bk[i].flag)
{
bk[i].flag=0;
strcpy(bk[i].readnu,stunumber);
stu[t].borrow++; //学生借阅本数加1
break;
}
if(i==M)
{
printf("该书不存在或已全部借出\n");
return;
}

//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bk.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str1,fp1);
puts(str1);

for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
fprintf(fp1,"%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp1);

//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stu.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str2,fp2);
puts(str2);

for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
}
fclose(fp2);
}

//还书
void bookreturn()
{
FILE *fp1,*fp2;
int i,t;
char stunumber[10],bkname[30];
printf("input the studentsnu:");
fflush(stdin);
gets(stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
if(stu[i].borrow!=0)
{t=i;break;}
else
{
printf("该生未借书,不能还书!\n");
return;
}
if(i==N)
{printf("未找到该生,不能还书!\n");return;}

printf("input the bookname:");
gets(bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0&&(bk[i].flag==0))
{
bk[i].flag=1;
strcpy(bk[i].readnu,"无");
stu[t].borrow--;
break;
}
if(i==M)
{printf("该书未借出或不存在!\n");return;}

//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bk.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str1,fp1);
puts(str1);

for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
fprintf(fp1,"%s%s%s%f%d%s",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp1);

//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stu.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str2,fp2);
puts(str2);

for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
}
fclose(fp2);

}
void find_stu()
{
char stunumber[10];
int i,j;
printf("input studentsnum:");
scanf("%s",stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
{
printf("学号:%-15s姓名:%-16s专业:%-18s借阅本数:%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
if(stu[i].borrow!=0)
printf("图书编号 书名 作者 单价 \n");
for(j=0;j<M;j++)
{
if(strcmp(stu[i].stunum,bk[j].readnu)==0)
printf("%-8s%-20s%-16s%-14.2f\n",bk[j].bknu,bk[j].bkname,bk[j].bkauthor,bk[j].price);
}
printf("\n\n\n");
break;

}
if(i==N) printf("该生不存在!!\n\n\n");

}

void main()
{ int i;
read1();
read2();
while(1)
{
printf("**********小型图书借阅管理系统***********\n");
printf("* 1.按作者查询图书 2.按书名查询图书 *\n");
printf("* 3.按条件查询图书 4.借 书 *\n");
printf("* 5.还 书 6.查询学生借书信息 *\n");
printf("* 0.退出系统 *\n");
printf("请选择(0~6):");
scanf("%d",&i);
switch(i)
{
case 1: find_author();break;
case 2: find_bkname();break;
case 3: find_other();break;
case 4: booklend();break;
case 5: bookreturn();break;
case 6: find_stu();break;
case 0: exit(0);
}
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-10
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 100
struct student
{
char name[20];
char num[10];
int chinese;
int math;
int english;
}stu[LEN],duan[LEN];
void add11(void)/*添加记录*/
{
FILE *fp;
int i=0,n=0;
if((fp=fopen("stu.txt","a"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入你将添加的人数:");
scanf("%d",&n);
printf("姓名\t\t学号\t语文\t数学\t英语\n");
for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
}
for(i=0;i<n;i++)
{
fprintf(fp,"\n%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
/* if(strcmp(num,stu[n].num)==0)
{
printf("%s %s %d %d %d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}*/
}
/*fflush(fp);*/
printf("添加成功!");
system("pause");
fclose(fp);
}
void del12(void)/*删除记录*/
{
FILE *fp;
char name[20];
int i=0,k=0,n=-1;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
printf("请输入说要删除的学生姓名或学号:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if((strcmp(name,stu[i].name)==0)||!(strcmp(name,stu[i].num)))
n=i;
i++;
}
if(n==-1)
{printf("没有所要删除的记录\n");
system("pause");
}
else
{
fclose(fp);
fp=fopen("stu.txt","w");
/*fprintf(fp,"%s %s %d %d %d",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ if(k==n)
continue;
fprintf(fp,"\n%s %s %d %d %d",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
fclose(fp);
printf("删除成功!\n");
system("pause");
}
}
void modify13(void)/*修改记录*/
{
FILE *fp;
char name[20];
char choose,waste;
int i=0,k=0,n=-1;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
printf("请输入你所要修改的学生姓名或学号:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if((strcmp(name,stu[i].name)==0)||!(strcmp(name,stu[i].num)))
n=i;
i++;
}
if(n==-1)
{ waste=getchar();
printf("没有所要修改的记录\n");
printf("是否添加?(y/n)\n");
if((choose=getchar())=='y'||choose=='Y')
{waste=getchar();
add11();
}
else
return;
system("pause");
}
else
{
fclose(fp);
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
printf("输入具体信息\n");
scanf("%s%s%d%d%d",stu[n].name,stu[n].num,&stu[n].chinese,&stu[n].math,&stu[n].english);
fp=fopen("stu.txt","w");
fprintf(fp,"%s %s %d %d %d",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);
for(k=1;k<i;k++)
{ fprintf(fp,"\n%s %s %d %d %d",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
fclose(fp);
printf("修改成功\n");
system("pause");
}
}
void inquire_nam21(void)/*按姓名查找*/
{
FILE *fp;
char name[20];
int i=0,n=0;
if((fp=fopen("stu.txt","r"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入所要查询学生姓名:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
for(n=0;n<i;n++)
{
/*fprintf(fp,"%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);*/
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
if(strcmp(name,stu[n].name)==0)
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}
}
if(n==i)
{
printf("没有你所要查询的学生\n");
system("pause");
}
fclose(fp);
}
void inquire_num22(void)/*按学号查找*/
{
FILE *fp;
char num[10];
int i=0,n=0;
if((fp=fopen("stu.txt","r"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入所要查询学生学号:");
scanf("%s",num);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
for(n=0;n<i;n++)
{
/*fprintf(fp,"%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);*/
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
if(strcmp(num,stu[n].num)==0)
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}
}
if(n==i)
{
printf("没有你所要查询的学生\n");
system("pause");
}
fclose(fp);
}
void situation31(void)/*分段查询*/
{
FILE *fp;
int exchange;
int i=0,k=0,n=0,choice,low,high;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t**********选择课程***********\n\n");
printf("\t\t\t*1.**** ****语文***** *\n\n");
printf("\t\t\t*2.**** ****数学***** *\n\n");
printf("\t\t\t*3.**** ****英语***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
printf("分数段(如60-70):");
scanf("%d-%d",&low,&high);
if(low>high)/*确保从小到大*/
{
exchange=low;
low=high;
high=exchange;
}
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].chinese&&stu[i].chinese<=high)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].math&&high>=stu[i].math)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].english&&high>=stu[i].english)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
}
if(n==0)
{printf("没有所在范围的记录\n");
system("pause");
}
else
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<n;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",duan[k].name,duan[k].num,duan[k].chinese,duan[k].math,duan[k].english);
}
system("pause");
}
}
void sit321(void)/*冒泡排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].chinese<stu[j+1].chinese)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].math<stu[j+1].math)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].english<stu[j+1].english)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);
}
void sit322(void)/*选择排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
int flag;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].chinese<stu[j].chinese)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].math<stu[j].math)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].english<stu[j].english)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);

}
void sit323(void)/*插入排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(chinese<=stu[j].chinese)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
suanfa++;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(math<=stu[j].math)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(english<=stu[j].english)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);
}
相似回答