#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct student {
int numb;
char name[10];
int score[3];
double ave;
}STU;
void input(STU* p, int num);
void showAll(STU*, int);
int searchByNumb(STU *,int);
int searchByName(STU *,int);
void search(STU *, int);
void insert(STU *, int *,int);
void del(STU *, int *);
void update(STU *, int);
void sort(STU *, int);
void save_info(STU *,int);
void load_info(STU *,int *);
void backup();
void main() {
int num = 0, choice;
STU stuArray[100];
for (;;) {
system("cls");
printf("\n--------------------------------------------------------------------------------------\n");
printf(" *学生信息管理系统* \n");
printf("\n---------------------------------------------------------------------------------------\n");
printf("\n------------------------------------------系统功能菜单-----------------------------------\n");
printf(" * 1.输入学生信息 \n");
printf(" * 2.显示全部学生信息 \n");
printf(" * 3.查询学生信息 \n");
printf(" * 4.新增学生信息 \n");
printf(" * 5.删除学生信息 \n");
printf(" * 6.修改学生信息 \n");
printf(" * 7.对学生信息排序 \n");
printf(" * 8.保存当前信息到文件 \n");
printf(" * 9.从文件加载学生信息 \n");
printf(" * 10.备份 \n");
printf(" * 0.退出系统 \n");
printf("------------------------------------------------------------------------------------------\n");
printf("请选择(1-10) :");
scanf("%d", &choice);
if (choice == 0) break;
switch (choice) {
case 1: printf("输入人数:"); scanf("%d", &num); input(stuArray, num); break;
case 2: showAll(stuArray,num); break;
case 3: search(stuArray, num); break;
case 4: insert(stuArray,&num,100); break;
case 5: del(stuArray, &num); break;
case 6: update(stuArray, num); break;
case 7: sort(stuArray, num); break;
case 8: save_info(stuArray, num); break;
case 9: load_info(stuArray, &num); break;
case 10: backup(); break;
}
printf("请按任意键继续.......\n");
getch();
}
printf("感谢您的使用,再见!\n");
}
//1.输入学生信息
void input(STU* p, int num) {
int i;
printf("请输入%d名学生信息\n", num);
printf("学号\t姓名\t数学\t英语\t语文\n");
for (i = 0; i < num; i++) {
scanf("%d%s%d%d%d", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
p[i].ave = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
}
printf("输入完成\n");
}
// 2.显示全部学生信息
void showAll(STU* p, int num) {
int i;
system("cls");
printf("目前共有%d名学生信息\n",num);
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
for (i = 0; i < num; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2], p[i].ave);
}
printf("输出完成\n");
}
int searchByNumb(STU *p,int num){
int i,number;
printf("请输入要查询学生的学号:");
scanf("%d",&number);
for(i = 0;i<=num;i++)
{
if(p[i].numb==number)
break;
return i;
}
}
int searchByName(STU* p, int num){
int i;
char name[10];
printf("请输入要查询学生的姓名:");
scanf("%s", name);
for(i=0;i<num;i++)
if(strcmp(p[i].name,name)==0)
break;
return i;
}
//3.查询学生信息
void search(STU *p,int num){
int choice,result=1;
for(;;)
{
system("cls");
printf("现在进入查询学生信息的填写\n");
printf("按学号查询请按1,按姓名查询请按2:");
scanf("%d",&choice);
switch(choice)
{
case 1: result=searchByNumb(p,num);break;
case 2: result=searchByName(p,num);break;
}
if(result>=num)
printf("无此人\n");
else{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
printf("继续查找请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//4.新增学生信息函数
void insert(STU *p,int *pnum,int maxLen)
{
STU stu;
int choice;
for(;;)
{
if(*pnum>100){
printf("人数已达上限,无法添加!\n");
break;
}
else{
system("cls");
printf("现在进行新增学生信息填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%ds%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
p[*pnum]=stu;
(*pnum)++;
printf("成功添加!继续添加请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
}
//5.删除学生信息
void del(STU *p,int *pnum){int result,i,choice;
for(;;){
system("cls");
printf("现在进入删除学生信息的处理\n");
result=searchByNumb(p,*pnum);
if(result>=*pnum)
printf("查无此人\n");
else
{
printf("找到了,确定删除请按1,取消删除请按2;");
scanf("%d",&choice);
if(choice==i){
//
for(i=result;i<*pnum-1;i++)
p[i]=p[i+1];
(*pnum)--;
printf("成功删除,当前学生总人数是%d人\n",*pnum);
}
}
printf("继续删除请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//6.修改学生信息
void update(STU *p,int num){
STU stu;
int result,choice;
for(;;)
{
system("cls");
printf("现在进入修改学生信息的处理\n");
result = searchByNumb(p,num);
if(result>=num)
printf("无此人\n");
else
{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
printf("确定修改请按1,取消修改请按2;");
scanf("%d",&choice);
if(choice==1){
printf("现在进行修改学生信息的填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%ds%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
p[result]=stu;
printf("成功修改,修改后的信息如下\n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
}
printf("继续修改请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//7.排序
void sort(STU *p,int num){
char style='a';
int type=1,i,j,index;
STU temp;
system("cls");
printf("现在进入对当前信息排序的处理\n");
printf("按升序排列请按a,按降序排列请按d;");
getchar();
scanf("%c",&style);
printf("按学号排序请按1,按平均分排序请按2;");
scanf("%d",&type);
if(style=='a'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
if(style=='d'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
printf("排序成功\n");
}
//8.保存当前信息到文件
void save_info(STU *p,int num){
char filename[20];
FILE *fp;
int i;
system("cls");
printf("现在进入保存当前信息到文件的处理\n");
printf("请输入文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL){
printf("无法打开文件\n");
return;
}
fprintf(fp,"目前共有%d名学生信息\n",num);
fprintf(fp,"学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
for(i=0;i<num;i++)
{
fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2], p[i].ave);
}
fclose(fp);
printf("保存成功\n");
}
//9.从文件加载学生信息
void load_info(STU *p,int *pnum){
char filename[20],secondLine[50];
FILE *fp;
int i,num;
system("cls");
printf("现在进入从文件加载学生信息的处理\n");
printf("请输入文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL){
printf("无法打开文件\n");
return ;
}
fscanf(fp,"目前共有%d名学生信息",&num);
//过滤第二行信息("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
for(i=0;i<6;i++)
fscanf(fp,"%s",secondLine);
for(i=0;i<num;i++){
fscanf(fp,"%d%s%d%d%d%lf",&p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2], p[i].ave);
}
*pnum=num;
fclose(fp);
printf("加载成功\n");
}
//10.备份
void backup(){
FILE *in,*out;
char infile[20],outfile[20],ch;
printf("请输入源文件的文件名:");
scanf("%s",infile);
printf("请输入备份文件的文件名:");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("无法打开该文件\n");
return ;
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("无法打开该文件\n");
return ;
}
ch=fgetc(in);
while(ch!=EOF){
fputc(ch,out);
ch=fgetc(in);
}
printf("备份成功\n");
fclose(in);
fclose(out);
}
求指点一下,以及还可以增加什么功能