#include <stdio.h>
#include <conio.h>
#include <string.h>
#define NUMSTU 5000 /*最大学生人数*/
#define NUMSCORE 4 /*成绩个数*/
#define NAMELEN 10 /*姓名的最大长度<10*/
/*主要数据结构*/
struct StudentInfo
{
unsigned long no; /*学号*/
char name[NAMELEN]; /*姓名*/
float score[NUMSCORE]; /*数学、语文、英语、平均成绩*/
};
struct StudentList
{
struct StudentInfo List[NUMSTU];
int excellentNum[3]; /*每科成绩为优秀(>=90)的人数*/
char subject[NUMSCORE][NAMELEN]= {"数学","语文","英语","平均"}; /*科目*/
int currentNumStu; /*当前表中的学生人数*/
} Students;
char menuItem,subItem; /*用户输入的菜单项*/
int i,j,l;
unsigned long tempNo; //用于排序对调内存的中间变量
struct StudentInfo nostudent;
char tempName[NAMELEN],namewj[NUMSTU];
float sum,k;
FILE *zp,*fp;
/*功能函数*/
void MainMenu();/*主菜单*/
void SortMenu();/*按学号升序或降序排列实现*/
void Creat();/*创建成绩单*/
void Add();/*添加学生*/
void Edit();/*编辑学生信息*/
void Delete();/*删除指定学号的学生信息*/
void Count();/*统计每科成绩>=90分以上的学生人数*/
void SortUp();/*升序排列*/
void SortDown();/*降序排列*/
void Show();/*显示学生信息*/
void AddFile();/*从文件添加学生信息*/
void ShowFile();/*先是学生信息到文件*/
void Choose();/*功能选择*/
void preinstall();/*结构体预设*/
int main()
{
preinstall();
do
{
MainMenu();
Choose();
}
while(menuItem!=‘0‘);
return 0;
}
void preinstall()
{
Students.List[NUMSTU].no= {0}; /*学号*/
Students.List[NUMSTU].score[NUMSCORE]= {0}; /*数学、语文、英语、平均成绩*/
Students.excellentNum[3]= {0}; /*每科成绩为优秀(>=90)的人数*/
Students.currentNumStu=0;
}
void MainMenu()//主菜单
{
printf("|-------------------------------------------------------|\n");
printf("|\t\t\t\t\t\t\t|\n");
printf("|\t\t 请输入选项编号(0 ~~ 7): \t\t|\n");
printf("|\t\t\t\t\t\t\t|\n");
printf("|-------------------------------------------------------|\n");
printf("|\t\t\t\t\t\t\t|\n");
printf("|\t\t 1——创建成绩单 \t\t|\n");
printf("|\t\t 2——添加学生 \t\t|\n");
printf("|\t\t 3——编辑学生 \t\t|\n");
printf("|\t\t 4——删除学生 \t\t|\n");
printf("|\t\t 5——统计成绩 \t\t|\n");
printf("|\t\t 6——排序成绩单 \t\t|\n");
printf("|\t\t 7——显示成绩 \t\t|\n");
printf("|\t\t 8——从文件读入 \t\t|\n");
printf("|\t\t 9——输出到文件 \t\t|\n");
printf("|\t\t 0——退出 \t\t|\n");
printf("|-------------------------------------------------------|\n");
printf("请输入选项编号(0 ~ 7): ");
/*清除键盘缓冲区*/
fflush(stdin);
scanf("%c",&menuItem);
}
void SortMenu()
{
/*按学号升序或降序排列实现*/
printf("|---------------------------------------|\n");
printf("| |\n");
printf("| 排序菜单 |\n");
printf("| |\n");
printf("|---------------------------------------|\n");
printf("| |\n");
printf("| 1——按学号升序排列 |\n");
printf("| 2——按学号降序排列 |\n");
printf("|---------------------------------------|\n");
printf("请输入选项编号(1 ~2): ");
fflush(stdin);
scanf("%c",&subItem);
switch(subItem)
{
case ‘1‘:
SortUp();
break;
case ‘2‘:
SortDown();
break;
default:
printf("非法输入\n");
}
}
void Creat()
{
/*创建成绩单*/
if(Students.currentNumStu>0)
{
printf("\n不能重新创建学生成绩单\n");
}
else
{
printf("注意:输入的结束标志为学号为0!\n");
i=0;
printf("请输入学号:");
scanf("%lu",&Students.List[i].no);
/*清除键盘缓冲区*/
fflush(stdin);
while(Students.List[i].no!=0&&Students.currentNumStu<NUMSTU)
{
printf("请输入姓名:");
gets(Students.List[i].name);
for(j=0; j<NUMSCORE-1; j++)
{
printf("请输入%s成绩:",Students.subject[j]);
scanf("%f",&Students.List[i].score[j]);
}
/*计算平均成绩*/
sum=0;
for(j=0; j<NUMSCORE-1; j++)
sum = sum+Students.List[i].score[j];
Students.List[i].score[3] = sum/3;
Students.currentNumStu++;
if(Students.currentNumStu==NUMSTU)
{
printf("成绩单已满!结束创建!!\n");
break;
}
i++;
printf("请输入学号:");
scanf("%lu",&Students.List[i].no);
/*清楚键盘缓冲区*/
fflush(stdin);
}
}
}
void Add()
{
/*添加学生*/
if(Students.currentNumStu>=NUMSTU)
{
printf("成绩单已满!不可再加学生信息!!\n");
}
else
{
i=Students.currentNumStu;
printf("请输入学号:");
scanf("%lu",&Students.List[i].no);
fflush(stdin);
printf("请输入姓名:");
gets(Students.List[i].name);
for(j=0; j<NUMSCORE-1; j++)
{
printf("请输入%s成绩:",Students.subject[j]);
scanf("%f",&Students.List[i].score[j]);
}
/*计算平均成绩*/
sum=0;
for(j=0; j<NUMSCORE-1; j++)
sum = sum+Students.List[i].score[j];
Students.List[i].score[3] =sum/3;
Students.currentNumStu++;
printf("添加成功!\n");
}
}
void Edit()
{
/*编辑学生信息*/
scanf("%lu",&tempNo);
for(i=0; i<Students.currentNumStu; i++)
if(Students.List[i].no==tempNo)
break;
if(i!=Students.currentNumStu)
{
for(j=0; j<NUMSCORE-1; j++)
{
printf("请输入%s成绩:",Students.subject[j]);
scanf("%f",&Students.List[i].score[j]);
}
/*计算平均成绩*/
sum=0;
for(j=0; j<NUMSCORE-1; j++)
sum = sum+Students.List[i].score[j];
Students.List[i].score[3] =sum/3;
printf("编辑成功!\n");
}
else
printf("不存在该学生!\n");
}
void Delete()
{
/*删除指定学号的学生信息*/
printf("请输入学号:");
scanf("%lu",&tempNo);
for(i=0; i<Students.currentNumStu; i++)
if(Students.List[i].no==tempNo)
break;
if(i!=Students.currentNumStu)
{
for(; i<Students.currentNumStu-1; i++)
{
Students.List[i].no=Students.List[i+1].no;
strcpy(Students.List[i].name,Students.List[i+1].name);
for(j=0; j<NUMSCORE; j++)
{
Students.List[i].score[j]=Students.List[i+1].score[j];
}
}
Students.currentNumStu--;
printf("删除成功!\n");
}
else
printf("不存在该学生!\n");
}
void Count()
{
/*统计每科成绩>=90分以上的学生人数*/
if(Students.currentNumStu==0)
printf("目前无记录,请添加成绩单信息!\n");
else
{
for(i=0; i<Students.currentNumStu; i++)
for(j=0; j<NUMSCORE-1; j++)
{
if(Students.List[i].score[j]>=90)
Students.excellentNum[j]++;
}
printf("%10s%10s%10s\n","数学成绩","语文成绩","英语成绩");
for(j=0; j<NUMSCORE-1; j++)
printf("%10d", Students.excellentNum[j]);
printf("\n");
}
}
void SortUp()
{
/*升序排列*/
if(Students.currentNumStu<2)
{
printf("成绩表中少于2人则不做排序!\n");
}
else
{
/*按学号升序排列*/
for(i=0; i<Students.currentNumStu-1; i++)
for(j=i+1; j<Students.currentNumStu; j++)
{
if(Students.List[i].no>Students.List[j].no)
{
nostudent=Students.List[i];
Students.List[i]=Students.List[j];
Students.List[j]=nostudent;
}
}
printf("排序结束,请选择菜单项显示信息!\n");
}
}
void SortDown()
{
/*降序排列*/
if(Students.currentNumStu<2)
{
printf("成绩表中少于2人则不做排序!\n");
}
else
{
/*按学号降序排列*/
for(i=0; i<Students.currentNumStu-1; i++)
for(j=i+1; j<Students.currentNumStu; j++)
{
if(Students.List[i].no<Students.List[j].no)
{
nostudent=Students.List[i];
Students.List[i]=Students.List[j];
Students.List[j]=nostudent;
}
}
printf("排序结束,请选择菜单项显示信息!\n");
}
}
void Show()
{
/*显示学生信息*/
if(Students.currentNumStu==0)
{
printf("无学生记录,请创建成绩单!\n");
}
else
{
printf("学生信息如下:\n");
printf("%15s%15s%10s%10s%10s%10s\n","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩");
for(i=0; i<Students.currentNumStu; i++)
{
printf("%15lu",Students.List[i].no);
printf("%15s",Students.List[i].name);
for(j=0; j<NUMSCORE; j++)
printf("%10.1f", Students.List[i].score[j]);
printf("\n");
}
}
}
void AddFile()
{
/*从文件添加学生信息*/
if(Students.currentNumStu>=NUMSTU)
{
printf("成绩单已满!不可打开文件添加信息!\n");
}
else
{
printf("请输入文件名:");
scanf("%s",namewj);
if((fp=fopen(namewj,"r"))==NULL)
{
printf("文件打开失败!\n");
return;
}
i=Students.currentNumStu;
while(!feof(fp))
{
if(Students.currentNumStu==5)
{
printf("成绩单已添加满!不可再加文件剩余学生信息!!\n");
break;
}
fscanf(fp,"%lu",&Students.List[i].no);
fflush(stdin);
fscanf(fp,"%s",&Students.List[i].name);
for(j=0; j<NUMSCORE-1; j++)
{
fscanf(fp,"%f",&Students.List[i].score[j]);
}
/*计算平均成绩*/
sum=0;
for(j=0; j<NUMSCORE-1; j++)
sum = sum+Students.List[i].score[j];
Students.List[i].score[3] =sum/3;
Students.currentNumStu++;
}
if(!feof(fp))
printf("文件信息添加完成!\n");
fclose(fp);
}
}
void ShowFile()
{
/*显示学生信息到文件*/
printf("请输入文件名:");
scanf("%s",namewj);
if((zp=fopen(namewj,"w"))==NULL)
{
printf("文件打开失败!\n");
return;
}
fprintf(zp,"count=%d\n",Students.currentNumStu);
fprintf(zp,"%15s%15s%10s%10s%10s%10s\n","number","name","math","chinese","english","average");
for(i=0; i<Students.currentNumStu; i++)
{
fprintf(zp,"%15lu",Students.List[i].no);
fprintf(zp,"%15s",Students.List[i].name);
for(j=0; j<NUMSCORE; j++)
fprintf(zp,"%10.1f", Students.List[i].score[j]);
fprintf(zp,"\n");
}
printf("文件输入完成!\n");
fclose(fp);
}
void Choose()
{
/*功能选择*/
switch(menuItem)
{
case ‘1‘:
Creat();
break;
case ‘2‘:
Add();
break;
case ‘3‘:
Edit();
break;
case ‘4‘:
Delete();
break;
case ‘5‘:
Count();
break;
case ‘6‘:
SortMenu();
break;
case ‘7‘:
Show();
break;
case ‘8‘:
AddFile();
break;
case ‘9‘:
ShowFile();
break;
case ‘0‘:
printf("您选择了“0——退出”\n");
break;
default:
printf("非法输入\n");
}
}
对大一写的代码函数结构化(没有调整代码书写规范)
Posted king丶貔貅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对大一写的代码函数结构化(没有调整代码书写规范)相关的知识,希望对你有一定的参考价值。
以上是关于对大一写的代码函数结构化(没有调整代码书写规范)的主要内容,如果未能解决你的问题,请参考以下文章