📄 051150033.cpp
字号:
#include <stdio.h> /*I/O函数*/
#include <stdlib.h> /*其它说明*/
#include <string.h> /*字符串操作函数*/
#define M 1000
int N=0; /*记录已经存在的记录条数*/
int H=0;
struct student /*定义数据结构*/
{ char number[8];
char name[16];
float score[3];
float average;
}stud[M],temp;
/*以下是函数声明*/
void inorder(struct student stud[]); /*排列记录*/
void insert(struct student stud[]); /*插入记录*/
void enter(struct student stud[]); /*输入记录*/
void print(struct student stud[]); /*显示记录*/
void quit(void); /*退出系统*/
int flag(struct student stud[]); /*返回值为0或1*/
int menu(void); /*菜单*/
void main() /*主函数*/
{
for(;;) /*无限循环*/
{ switch(menu()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ case 1: enter(stud); break; /*输入记录*/
case 2: inorder(stud);break; /*排序*/
case 3: insert(stud); break; /*插入记录*/
case 4: quit(); /*如菜单返回值为4程序结束*/
}
}
}
/*输入数据函数*/
void enter(struct student stud[])
{ int n=0,i,j,k,c;
char b[4];
float sum;
printf("How many students' record do you want to enter? n=%d",n);
scanf("%d",&n); /*输入一次要输入记录数*/
for(i=0;i<n;)
{ sum=0; /*统计三科总分*/
printf("Input the %dth student's number ",N+1);
scanf("%s",stud[N].number); /*输入学号*/
/*以下if-else语句判断所输记录是否存在*/
if(flag(stud)) /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/
{
printf("The record has exist.\n");
printf("Input again.");
getchar();
}
else
{ printf("Input the %dth student's name ",N+1);
scanf("%s",stud[N].name); /*输入姓名*/
for(j=0;j<3;j++)
{ do
{
printf("Input the %dth student's score(%d)",N+1,j+1); /*打印提示*/
stud[N].score[j]=atof(b); /*将字符串强制转换成实型,得值赋给stud[N].score[j]*/
if(stud[N].score[j]<=0||stud[N].score[j]>100) /*判断分数是否在0-100之间*/
{
k=1; /*分数不在0-100之间时k值为1*/
printf("Error input !!!\n");
printf("Input again ...\n"); /*打印出错提示*/
}
else
k=0; /*分数在0-100之间时k值为0*/
} while(k); /*由k值决定是否要循环*/
sum+=stud[N].score[j]; /*统计三科总分*/
}
stud[N].average=sum/3.0; /*平均分*/
}
printf("\nEnter success !!!\n");
printf("\nPress any key to return.");
getchar();
N++; /*记录数加1*/
i++;
H=1;
}
}
/*排序函数*/
void inorder(struct student stud[])
{ int i,j,k;
for(i=0;i<N-1;i++)
{ k=i;
/*以下for语句为选择法排序*/
for(j=i+1;j<N;j++)
if(stud[j].average>stud[k].average)
k=j;
if(k!=i)
{
temp=stud[k];
stud[k]=stud[i];
stud[i]=temp;
H=1;
}
}
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" ");
printf("********* Has been inoder!! *********\n"); /*排序成功提示*/
}
/*插入记录函数*/
void insert(struct student stud[])
{ int i,j,k;
float sum;
char flag='y',b[4];
while(flag=='y')
{ sum=0;
k=0;
printf("Input the student's number you want to insert:");
scanf("%s",stud[N].number); /*输入要插入记录的学号*/
for(i=0;i<N;i++)
if(strcmp(stud[i].number,stud[N].number)==0) /*查找要插入记录是否存在*/
k=1;
if(k) /*判断要插入记录是否存在*/
{
printf("The record has exist.\n");
}
else
{ printf("Input the student's name you want to insert:");
scanf("%s",stud[N].name); /*输入要插入记录的名字*/
for(j=0;j<3;j++)
{ do
{ printf("Input the student's score(%d):",j+1);
scanf("%s",b); /*输入分数*/
stud[N].score[j]=atof(b);
if(stud[N].score[j]<=0||stud[N].score[j]>100) /*判断分数是否在0-100之间*/
{ k=1;
printf("Error input !!!\n");
printf("Input again ...\n");
}
else
k=0;
}while(k);
sum=sum+stud[N].score[j]; /*三科总分*/
}
stud[N].average=sum/3.0; /*平均分*/
/*以下for语句为插入*/
for(j=0;j<N;j++)
if(stud[j].average<stud[N].average)
{ i=N;
temp=stud[N];
for(;i>j;)
{ stud[i]=stud[i-1];
i--;
}
stud[j]=temp;
j=N;
}
N++;
H=1; /*记录数加1*/
printf("\nInsert success !!!\n\n");
}
printf("If you want to go on press:y\n");
printf("Else press any key to menu:");
flag=getchar(); /*获取一个字符判断是否要继续插入*/
}
}
/*退出系统函数*/
void quit(void)
{ char a;
if(H)
{ printf("\n\n\n\n\n\n\n\n\n\t\t Do you want to save the datas have changed ?");
printf("\n\n\t\t\t\t y & n ? ");
printf("\n\t\t\t\t ");
a=getchar();
printf("%c",a);
getchar();
if(a=='y')
{
/*以下printf语句为打印再见语句*/
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\b\b\b\b**********");
printf(" See you\a");
printf(" next time\a");
printf(" !\a");
printf(" **********");
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t********** Bye Bye !!! **********");
exit(0); /*退出系统*/
}
else
{
/*以下printf语句为打印再见语句*/
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\b\b\b\b**********");
printf(" See you\a");
printf(" next time\a");
printf(" !\a");
printf(" **********");
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t********** Bye Bye !!! **********");
exit(0); /*退出系统*/
}
}
else
{/*以下printf语句为打印再见语句*/
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\b\b\b\b**********");
printf(" See you\a");
printf(" next time\a");
printf(" !\a");
printf(" **********");
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t********** Bye Bye !!! **********");
exit(0); /*退出系统*/
}
}
/*返回值为0或1函数*/
int flag(struct student stud[])
{ int i,flag=0;
/*以下判断学号是否相同*/
for(i=0;i<N;i++)
if(strcmp(stud[i].number,stud[N].number)==0)
flag=1; /*相同返回1,否则返回0*/
return(flag);
}
/*菜单函数*/
int menu(void)
{ int n;
char a[5];
/*以下是菜单图案*/
do
{
printf("\n");
printf("\t\t ________________________________________________\n");
printf("\t\t||\t\t The menu:\t\t\t||\n");
printf("\t\t||----------------------------------------------||\n");
printf("\t\t|| (1) Enter the studens' records ||\n");
printf("\t\t||----------------------------------------------||\n");
printf("\t|| || (2) inorder the records by the average score || ||\n");
printf("\t||------||----------------------------------------------||------||\n");
printf("\t|| || (3) Insert a student's record || ||\n");
printf("\t|| ||----------------------------------------------|| ||\n");
printf("\t\t|| (4) Quit ||\n");
printf("\t\t|------------------------------------------------|\n");
/*以下语句是输入菜单函数要返回的值*/
printf("\n\t\t\tChoose the item you want (1-4):( )\b\b");
scanf("%s",a);
n=atoi(a);
if(n<1||n>4)
{
printf("\t\t\t Error input. Input again.");
}
}
while(n<1||n>4);
return(n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -