求:C语言程序报告(管理系统),源代码Microsoft Visual C++6.0上运行

格式也要是完整的!

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

typedef struct
{
long class_1; /*班级*/
long number; /*学号*/
char name[20]; /*姓名*/
float tall; /*身高*/
float math; /*数学*/
float c_program; /*C语言*/
float physics; /*大学物理*/
float english; /*大学英语*/
float sum; /*总分*/
float average; /*平均分*/
}Student;
Student stud[100];
int i=0;

int menu() /*菜单函数*/
{
int a;
system("graftabl 936");

printf("***********************学生信息管理系统************************\n\n\n");
printf("\t\t\t.(1)输入学生信息\n");
printf("\t\t\t.(2)显示所有学生信息\n");
printf("\t\t\t.(3)按平均分升降排序\n");
printf("\t\t\t.(4)根据学号查找学生信息\n");
printf("\t\t\t.(5)插入学生信息\n");
printf("\t\t\t.(6)删除学生信息\n");
printf("\t\t\t.(7)修改学生信息\n");
printf("\t\t\t.(8)从文件中读入数据\n");
printf("\t\t\t.(9)将所有记录写入文件\n");
printf("\t\t\t.(0)退出本系统\n\n\n");
printf("***********************学生信息管理系统************************\n");
printf("请选择你要的操作(0~9):");
scanf("%d",&a); /*读入一个数*/
while(a<0||a>9)
{
printf("输入错误!请重新输入:\n");
scanf("%d",&a); /*输入错误就一直循环*/
}
system("cls"); /*清屏*/
return(a); /*返回a的值*/
}

int input(Student stud[])
{
char flag='Y';
while(flag=='Y'||flag=='y')
{
printf("请输入该学生的班级:");
scanf("%ld",&stud[i].class_1);
printf("请输入该学生的学号:");
scanf("%ld",&stud[i].number);
printf("请输入该学生的姓名:");
scanf("%s",stud[i].name);
printf("请输入学生的身高:");
scanf("%f",&stud[i].tall);
printf("请输入该学生的“数学”分数:");
scanf("%f",&stud[i].math);
printf("请输入该学生的“C语言”分数:");
scanf("%f",&stud[i].c_program);
printf("请输入该学生的“大学物理”分数:");
scanf("%f",&stud[i].physics);
printf("请输入该学生的“大学英语”分数:");
scanf("%f",&stud[i].english);
getchar();
stud[i].sum=stud[i].math+stud[i].c_program+stud[i].physics+stud[i].english;
stud[i].average=stud[i].sum/4;
printf("该学生的总分为:%6.2f\t平均分为:%6.2f\n",stud[i].sum,stud[i].average);
i++;
printf("继续输入学生信息请按:Y or y,退出请按:N or n.\n");
scanf("%c",&flag); /*判断是否继续输入*/
}
printf("按任意键回主菜单\n");
getchar();
system("cls");
return(i);
}

void Display(Student stud[],int n) /*显示所有记录*/
{
int k;
if(n==0)
printf("暂无学生记录!\n");
else
{
printf(" 班别 学号 姓名 身高 数学 C语言 物理 英语 总分 平均分\n");
for(k=0;k<n;k++) /*循环输出*/
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
}
}
system("pause");
system("cls");
}

void Sort(Student stud[],int i) /*按平均分排序*/
{
int m,n,k; /*m,n为循环变量*/
Student t;
for(m=0;m<i-1;m++) /*排序*/
for(n=m+1;n<i;n++)
if(stud[m].average<stud[n].average)
{
t=stud[m];
stud[m]=stud[n];
stud[n]=t;
}
printf("排序后的顺序为:\n");
printf(" 班别 学号 姓名 身高 数学 C语言 物理 英语 总分 平均分\n");
for(k=0;k<n;k++) /*循环输出*/
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
}

system("pause");
system("cls");
}

void Search(Student stud[],int i) /*查找并显示一个记录*/
{
int p,k; /*p为要查找的学生学号*/
char flag='y';
while(flag=='y'||flag=='Y')
{
printf("请输入要查找的学生学号:");
scanf("%d",&p);
getchar();
for(k=0;p!=stud[k].number&&k<i;k++)
if(k==i)
printf("该学号不存在!\n");
else
{
printf("该学生的信息为:\n");
printf(" 班别 学号 姓名 身高 数学 C语言 物理 英语 总分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);

}
printf("继续查找学生信息请输入:Y or y,退出输入:N or n.\n");
scanf("%c",&flag);
}
system("cls");

}

int Insert(Student stud[],int i) /*插入学生信息*/
{
char flag='Y';
while(flag=='y'||flag=='Y')
{
printf("请输入要插入学生的班别:");
scanf("%ld",&stud[i].class_1);
printf("请输入要插入学生的学号:");
scanf("%ld",&stud[i].number);
printf("请输入要插入学生的姓名:");
scanf("%s",&stud[i].name);
printf("请输入要插入学生的身高:");
scanf("%f",&stud[i].tall);
printf("请输入要插入学生的“数学”分数:");
scanf("%f",&stud[i].math);
printf("请输入要插入学生的“C语言”分数:");
scanf("%f",&stud[i].c_program);
printf("请输入要插入学生的“大学物理”分数:");
scanf("%f",&stud[i].physics);
printf("请输入要插入学生的“大学英语”分数:");
scanf("%f",&stud[i].english);
getchar();
stud[i].sum=stud[i].math+stud[i].c_program+stud[i].physics+stud[i].english;
stud[i].average=stud[i].sum/4;
printf("该学生的总分为:%6.2f\n",stud[i].sum);
printf("该学生的平均分为:%6.3f\n",stud[i].average);
i++;
printf("继续插入学生信息请输入:Y or y,退出输入:N or n.\n");
scanf("%c",&flag); /*判断是否继续输入*/
}
getchar();
printf("是否需要排序,需要请按'Y' or 'y';不需要请按'N' or 'n'.\n");
flag=getchar();

if(flag=='y'||flag=='Y')
Sort(stud,i);
system("cls");
return(i);
}

int Delete(Student stud[],int i) /*根据学号删除学生信息*/
{
long s;
int t,p;
char a='Y'; /*判断是否继续*/

while(a=='Y'||a=='y')
{
printf("请输入需要删除学生的学号:\n");
scanf("%ld",&s);
getchar();
for(t = 0; t < i && s!=stud[i].number; t++)
if(s==stud[t].number)
{
for(p=t;p<i;p++)
stud[p]=stud[p+1];
i=i-1;
printf("删除成功!\n");
}
else printf("没有找到要删除的学号!\n");
printf("是否继续删除,继续请按'Y' or 'y',退出请按'N' or 'n'.\n");
a=getchar(); /*判断是否继续*/
getchar(); /*消除回车键的影响*/
}
system("cls");
return(i);
}

void change(Student stud[],int i) /*修改学生信息*/
{
long p=0; /*p用来表示要修改的学生学号*/
int k; /*k为循环变量*/
char a='y';
while(a=='y'||a=='Y')
{
printf("\t\t学生信息修改:\n");
printf("请输入要修改的学生的学号:\n");
scanf("%ld",&p);
for(k=0;p!=stud[k].number && k<i;k++)
if(k==i)
printf("无法找到该学生的信息:\n");
else
{
printf("该学生的信息为:\n");
printf(" 班别 学号 姓名 身高 数学 C语言 物理 英语 总分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);

printf("请输入该学生的新信息:\n");

printf("请输入该学生的班级:");
scanf("%d",&stud[k].class_1);
printf("请输入该学生的学号:");
scanf("%d",&stud[k].number);
printf("请输入该学生的姓名:");
scanf("%s",stud[k].name);
printf("请输入该学生的身高:");
scanf("%f",&stud[k].tall);
printf("请输入该学生的“数学”分数:");
scanf("%f",&stud[k].math);
printf("请输入该学生的“C语言”分数:");
scanf("%f",&stud[k].c_program);
printf("请输入该学生的“大学物理”分数:");
scanf("%f",&stud[k].physics);
printf("请输入该学生的“大学英语”分数:");
scanf("%f",&stud[k].english);
getchar();
stud[k].sum=stud[k].math+stud[k].c_program+stud[k].physics+stud[k].english;
stud[k].average=stud[k].sum/4;
printf("修改成功!\n");
}
printf("是否继续修改,继续请按'y'或'Y',退出请按'N'或'n'.\n");
a=getchar();
}
system("pause");
system("cls");
}

int Read(Student stud[],int i) /*从文件中读入学生信息*/
{
int k=i;
FILE *fp; /*定义一个文件类型的指针*/
char filename[20]; /*定义文件名*/
printf("请输入文件名:\n");
scanf("%s",&filename);

if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{
printf("无法打开文件!\n"); /*打开失败信息*/
return 0;
}
printf("从文件%s中读入的数据为:\n",filename);
fread(&stud[k],sizeof(Student),1,fp);
printf(" 班别 学号 姓名 身高 数学 C语言 物理 英语 总分 平均分\n");
while(!feof(fp))
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
k++;
fread(&stud[k],sizeof(Student),1,fp);
}
fclose(fp);
printf("读入成功!\n");
system("pause");
system("cls");
return(k);
}

void Save(Student stud[],int i) /*将所有记录写入文件*/
{
int k=0;
FILE *fp; /*定义文件指针*/
char filename[80]; /*定义文件名*/
printf("请输入您要储存学生信息的文件名"); /*输入文件名*/
scanf("%s",&filename);
if( (fp=fopen(filename,"wt"))==NULL) /*打开文件*/
{
printf("无法打开该文件!\n");
return;
}

while(k<i)
{
fwrite(&(stud[k]), sizeof(Student), 1, fp);
k++;
}

printf("信息保存成功!\n");
fclose(fp);
}

int main(void)
{
int n=0;
while(1) /*选择判断要执行的语句*/
{
switch(menu())
{
case 1:printf("\n***********输入学生信息**********\n"); /*输入学生信息*/
n=input(stud);break;
case 2:printf("\n***********显示所有学生的信息*******\n");
Display(stud,n);break;
case 3:printf("\n***********按平均分升降排序*******\n");
Sort(stud,n);break;
case 4:printf("\n***********根据学号查找学生的信息*******\n");
Search(stud,n);break;
case 5:printf("\n***********插入学生的信息*******\n");
n=Insert(stud,n);break;
case 6:printf("\n***********删除学生信息*******\n");
n=Delete(stud,n);
case 7:printf("\n***********修改学生的信息*******\n");
change(stud,n);break;
case 8:printf("\n***********从文件中读入数据*******\n");
n=Read(stud,n);break;
case 9:printf("\n***********将所有记录写入文件*******\n");
Save(stud,n);break;
case 0:printf("\n***********感谢您的使用!*******\n");
exit(0);
}
}
return 0;
}

学生管理系统,,,这个可以不??
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-18
信息管理代码:实现增删改查建显功能

/* Note:Your choice is C IDE */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100

struct student
{
char num[10];
char name[10];
char tel[11];
};/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/* sch_num与sch_name函数被mysearch调用 */
void sch_num(FILE *fp);
void sch_name(FILE *fp);
void mymodify();
void myadd();
void mydelete();
/* del_num与del_name函数被mydelete调用 */
void del_num(FILE *fp);
void del_name(FILE *fp);
void mysort();
/* sort_num与sort_name函数被mysort调用 */
void sort_num();
void sort_name();

void main()
{
char choose,yes_no;
do
{
myprint(); /* 显示主菜单 */
printf(" ");
choose=getch();
switch(choose)
{
case '1': mycreate(); break; /* 创建 */
case '2': mydisplay(); break; /* 显示 */
case '3': mysearch(); break; /* 查询 */
case '4': mymodify(); break; /* 修改 */
case '5': myadd(); break; /* 添加 */
case '6': mydelete(); break; /* 删除 */
case '7': mysort(); break; /* 排序 */
case '0': break;
default:printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')
break;
printf("\n 要继续选择吗(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}

void myprint() /* 显示菜单界面 */
{
printf("\n\n\n\n\n\n\n\n");
printf(" |----------------------------|\n");
printf(" | 请输入选项编号(0-7): |\n");
printf(" |----------------------------|\n");
printf(" | 1--创建信息管理系统 |\n");
printf(" | 2--显示信息管理系统 |\n");
printf(" | 3--查询信息管理系统 |\n");
printf(" | 4--修改信息管理系统 |\n");
printf(" | 5--添加信息管理系统 |\n");
printf(" | 6--删除信息管理系统 |\n");
printf(" | 7--排序信息管理系统 |\n");
printf(" | 0--退出 |\n");
printf(" |----------------------------|\n");
}

/* 定义创建信息管理系统的函数 */
void mycreate()
{
int i=1;
struct student temp;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

printf("\n 请输入第1个记录:\n");
printf(" 学号(用#结束输入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')
{
fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel);
i++;

printf("\n 请输入第%d个记录:\n",i);
printf(" 学号(用#结束输入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
}
fclose(fp);
}

/* 定义显示信息管理系统的函数 */
void mydisplay()
{
int n=0;
struct student temp;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

clrscr();
printf(" 学号 姓名 电话号码\n");
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
printf("\n 文件中共有%d个记录!\n",n);
fclose(fp);
}

/* 定义查询信息管理系统的函数 */
void mysearch()
{
char c;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

printf("\n 按学号查询(h),还是按姓名查询(m)?");
c=getch();
if(c=='h'||c=='H')
sch_num(fp); /* 按学号查询 */
if(c=='m'||c=='M')
sch_name(fp); /* 按姓名查询 */
else
printf("\n 非法字符!\n");
fclose(fp);
}

/* 定义按学号查询信息管理系统的函数 */
void sch_num(FILE *fp)
{
int flag=0,n=0;
char tempnum[10];
struct student temp;

printf("\n 请输入要查询记录的学号:");
gets(tempnum);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempnum,temp.num)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
}

/* 定义按姓名查询信息管理系统的函数 */
void sch_name(FILE *fp)
{
int flag=0,n=0;
char tempname[10];
struct student temp;

printf("\n 请输入要查询记录的姓名:");
gets(tempname);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempname,temp.name)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
}

/* 定义修改信息管理系统的函数 */
void mymodify()
{
char c;
int n=0;
struct student *find,temp,record[100],*p; /* 最多100个记录 */
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

if(n==0)
{
printf("\n 文件中无记录!\n");
return;
}
printf("\n 请输入要修改记录的学号:");
gets(temp.num);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
find=p; /* find记住修改记录的位置 */
break;
}
if(p==record+n)
{
printf("\n 无此人!\n");
return;
}
do
{
printf("\n 请输入正确的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入正确的姓名:");
gets(temp.name);
printf(" 请输入正确的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if((strcmp(temp.num,p->num)==0)&&(p!=find))
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*find=temp; /* find指向需要修改记录的位置 */
break;
}
}while(c=='Y'||c=='y');

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}

/* 定义添加信息管理系统的函数 */
void myadd()
{
char c;
int n=0;
struct student temp,record[N],*p;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

do
{
printf("\n 请输入新记录的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入新记录的姓名:");
gets(temp.name);
printf(" 请输入新记录的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*p=temp;
break;
}
}while(c=='Y'||c=='y');

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n+1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}

/* 定义删除信息管理系统的函数 */
void mydelete()
{
char c;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

printf("\n 按学号删除(h),还是按姓名删除(m)?");
c=getch();
if(c=='h'||c=='H')
del_num(fp); /* 按学号删除 */
if(c=='m'||c=='M')
del_name(fp); /* 按姓名删 */
else
printf("\n 非法字符!\n");
fclose(fp);
}

/* 定义按学号删除信息管理系统的函数 */
void del_num(FILE *fp)
{
int n=0;
char tempnum[10];
struct student record[N],*p,*k;

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 请输入要删除记录的学号:");
gets(tempnum);

for(k=record;k<record+n;k++)
if(strcmp(tempnum,k->num)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");

fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}

/* 定义按姓名删除信息管理系统的函数 */
void del_name(FILE *fp)
{
int n=0;
char tempname[10];
struct student record[N],*p,*k;

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 请输入要删除记录的姓名:");
gets(tempname);

for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");

fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}

/* 定义排序信息管理系统的函数 */
void mysort()
{
char c;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
fclose(fp);

printf("\n 按学号排序(h),还是按姓名排序(m)?");
c=getch();
if(c=='h'||c=='H')
sort_num(); /* 按学号排序 */
if(c=='m'||c=='M')
sort_name(); /* 按姓名排序 */
else
printf("\n 非法字符!\n");
}

/* 定义按学号排序信息管理系统的函数 */
void sort_num()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按学号的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按学号的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}

fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n;p++)
{
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
}
fclose(fp);
}

/* 定义按姓名排序信息管理系统的函数 */
void sort_name()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;

fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按姓名的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按姓名的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}

fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
getch();
}
第2个回答  2012-06-19
没得其他的要求?
相似回答