1、主函数
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Student_MM.h"
int main()
{
while(1)
{
int Chose = 0; //输入选择
Menu(); //显示主菜单
printf("请输入你的选择:");
scanf("%d",&Chose);
if (0 < Chose < 8)
{
printf("请重新选择!\n");
}
else
{
switch (Chose)
{
case 1:
Input(); //输入学生信息
break;
case 2:
Delete(); //删除学生信息
break;
case 3:
Browse(); //浏览学生信息
break;
case 4:
Search(); //查找学生信息
break;
case 5:
Rank(); //学生信息排序
break;
/*case 6:
Save(); //存储学生信息
break;
case 7:
output(); //导出学生信息
break;*/
default:
break;
}
}
}
return 0;
}
2、sudden_MM.h
/***** 声明几个函数原形 *****/
#ifndef Student_MM_h
#define Student_MM_h
extern int Menu(); //显示主菜单
extern int Input(); //输入学生信息
extern int Delete(); //删除学生信息
extern int Browse(); //浏览学生信息
extern int Search(); //查找学生信息
extern int Rank(); //学生信息排序
extern int Save(); //存储学生信息
extern int output(); //导出学生信息
#endif /* Student_MM_h */
3、student_MM.c
/**************************/
/**********函数实现**********/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//包含自定义文件时,使用双引号
#include "Student_MM.h"
#define M 3
#define N 5
/**********************************************/
typedef struct student
{
char Student_Num[20]; //学生学号
char Name[50]; //学生姓名
int Score[M]; //每一科目的分数
int Sum;
}STUDENT;
STUDENT student[N]; //一共N个学生都使用struct
int ORS = 0; //定义起始人数是0个人
/**********************************************/
/**********************************************/
int Menu(void)
{
printf("北航学生信息管理系统\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("----------------\n");
return 0;
}
/**********************************************/
//请输入需要录入信息的学生个数
/**********************************************/
int Input(void)
{
int Input_Num,i;
//system("CLS");
printf("请输入需要录入信息的学生个数:\n");
scanf("%d",&Input_Num);
for (i = ORS; i < ORS + Input_Num; i++)
{
printf("请输入%d学生的学号:\n",i + 1);
scanf("%s",student[i].Student_Num);
printf("请输入%d学生的姓名:\n",i + 1);
scanf("%s",student[i].Name);
printf("请输入第%d学生的%d门课的成绩:\n",i + 1,M);
for (int j = 0; j < M; j++)
{
printf("请输入第%d门课的成绩:\n",j + 1);
scanf("%d",&student[i].Score[j]);
}
}
ORS = ORS + Input_Num; //增加过后的人数
return 0;
}
/**********************************************/
//删除学生信息
//1、输出全部学生信息或者指定学生信息
//2、
/**********************************************/
int Delete(void)
{
int Error_Mark = 0; //输出错误标志Error_Mark
while ((Error_Mark = 0))//如果输入错误,提示再次输入,直到正确为止
{
char Chose[10];
printf("删除全部学生信息(A)还是指定学生信息(I):\n");
scanf("%s",Chose);
if (strcmp(Chose,"A") == 0) //删除全部
{
ORS = 0; //人数清零
printf("删除成功!\n");
Error_Mark = 1;
}
else if(strcmp(Chose, "I") == 0)//删除指定学生信息
{
Error_Mark = 1;
//开始删除指定的学生信息...
//1、显示所有学生的信息...
//2、选择要删除的学生信息...
//3、删除...
char InputDel; //要删除学生信息的学号
printf("请输入要删除学生信息的学号:");
scanf("%s",&InputDel); //键入要删除的学号
//其实就是删除指定的数组元素而已...
}
else
{
printf("输出错误请重新输入!\n");
//Error_Mark = 1; //输出错误标志位设置为1
}
}
return 0;
}
/**********************************************/
//浏览学生信息
/**********************************************/
int Browse()
{
//将学生的信息全部打印出来
//1、学生学号
//2、学生姓名
//3、每一科目的分数
for (int j = 0; j < ORS; j++)
{
student[j].Sum = 0; //每个学生的初始总分是0分
for (int i = 0; i < M; i++)
{
student[j].Sum += student[j].Score[i];
}
} //计算每个学生的总成绩是多少
//输出学生信息...
for (int i = 0; i < ORS; i++) //学生个数
{
printf("第%d个学生的学号是:%s\n",i + 1,student[i].Student_Num);//打印学号
printf(".........姓名是:%s\n",student[i].Name); //打印姓名
for (int j = 0; j < M; j ++)//学生学号
{
printf("第%d科的分数是:%d\n",j + 1,student[i].Score[j]);
}
printf(".......总成绩是:%d\n",student[i].Sum);
printf("_______\n");//打印学号
}
return 0;
}
/**********************************************/
//查找学生信息
/**********************************************/
int Search()
{
//1、学号查找
//2、姓名查找
//3、分数查找....考多少分的是哪几个人或者大于多少分的是哪几个人
printf("选择你所需要的查找方式:\n");
printf("1、学号查找\n");
printf("2、按姓名查找\n");
printf("3、按照分数查找\n");
int chose; //你的选择
scanf("%d",&chose);
switch (chose)
{
case 1:
//学号查找
printf("请输入你的学号:\n");
char InputNum[20]; //输入你所想要查找的学号
scanf("%s",InputNum);
for (int i = 0; i < ORS ; i++ )
{
//判断两个字符串是否相同
if(strcmp(InputNum,student[i].Student_Num) == 0) //找到了该学号,输出该学生的信息
{
printf("该学生的基本信息如下:\n");
printf("_____\n");
printf("该学生的学号是:%s\n",student[i].Student_Num);
printf("该学生的姓名是:%s\n",student[i].Name);
printf("该学号生的各科分数是:\n");
for (int j = 0; j < M; j++)
{
printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
}
}
}
break;
case 2:
//姓名查找
printf("亲输入你想查找学生的姓名:");
char SearchName[50];
scanf("%s",SearchName); //输入查找的姓名
//开始查找...
for (int i = 0; i < ORS; i++) {
if(strcmp(SearchName,student[i].Name) == 0)
{
printf("该学生的基本信息如下:\n");
printf("_____\n");
printf("该学生的学号是:%s\n",student[i].Student_Num);
printf("该学生的姓名是:%s\n",student[i].Name);
printf("该学号生的各科分数是:\n");
for (int j = 0; j < M; j++)
{
printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
}
}
}
break;
case 3:
//分数查找
printf("请输入你想查找的是哪一科目:\n");
int Inputls; //输入查找的科目
scanf("%d",&Inputls);
//开始查找...
printf("请输入待查找学生该科目的分数:\n");
int InputScore; //待查找学生该科目的分数
scanf("%d",&InputScore);
for (int i = 0; i < ORS; i++)
{
if(InputScore == student[i].Score[Inputls - 1])//与所要查找科目的分数是相同的
{
printf("该学生的基本信息如下:\n");
printf("_____\n");
printf("该学生的学号是:%s\n",student[i].Student_Num);
printf("该学生的姓名是:%s\n",student[i].Name);
printf("该学号生的各科分数是:\n");
for (int j = 0; j < M; j++)
{
printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
}
}
}
break;
default:
break;
}
return 0;
}
/**********************************************/
//学生信息排序
//定义一个排序函数
/**********************************************/
int Rank()
{
//1、按学号排序...即学号从小到大排
//2、按照某一科目或者总成绩的分数排序
//3、按照姓氏排序...姓氏首字母排序
//.....
//选择排序方法
printf("1、按学号排序...即学号从小到大排\n");
printf("2、按照某一科目或者总成绩的分数排序\n");
printf("3、按照姓氏排序...姓氏首字母排序\n");
int chose; //选择排序的方法
int choice;
printf("请输入排序方法:\n");
scanf("%d",&chose);
switch (chose)
{
case 1:
//1、按学号排序...即学号从小到大排
//...冒泡排序法
//..转化成int型
for (int i = 0 ; i < ORS - 1; i++)
{
for (int j = 0; j < ORS - i - 1; j++)
{
if(strcmp(student[j].Student_Num , student[j + 1].Student_Num) > 0)
{
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
}
}
}
break;
case 2:
//2、按照某一科目或者总成绩的分数排序
//...按照第一科目成绩排序
//...按照第二科目成绩排序
//...按照第三科目成绩排序
//...按照总成绩排序
printf("1...按照第一科目成绩排序\n");
printf("2...按照第二科目成绩排序\n");
printf("3...按照第三科目成绩排序\n");
printf("4...按照总成绩排序\n");
printf("请输入你选择的排序方式:\n");
scanf("%d",&choice);
switch (choice)
{
case 1:
printf("按照第一科目成绩的排序是:\n");
for (int i = 0; i < ORS; i++)
{
for (int j = 0; j < ORS - i - 1; j++)
{
if (student[j].Score[0] < student[j + 1].Score[0])
{
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
}
}
}
break;
case 2:
printf("按照第二科目成绩的排序是:\n");
for (int i = 0; i < ORS; i++)
{
for (int j = 0; j < ORS - i - 1; j++)
{
if (student[j].Score[1] < student[j + 1].Score[1])
{
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
}
}
}
break;
case 3:
printf("按照第三科目成绩的排序是:\n");
for (int i = 0; i < ORS; i++)
{
for (int j = 0; j < ORS - i - 1; j++)
{
if (student[j].Score[2] < student[j + 1].Score[2])
{
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
}
}
}
break;
case 4:
printf("按照总成绩的排序是:\n");
for (int j = 0; j < ORS; j++)
{
student[j].Sum = 0; //每个学生的初始总分是0分
for (int i = 0; i < M; i++)
{
student[j].Sum += student[j].Score[i];
}
} //计算每个学生的总成绩是多少
for (int i = 0; i < ORS; i++)
{
for (int j = 0; j < ORS - i - 1; j++)
{
if (student[j].Sum < student[j + 1].Sum)
{
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
}
}
}
break;
default:
break;
}
case 3:
//3、按照姓氏排序...姓氏首字母排序
//按照首字母的ascii进行排序
//a - b
for(int i =0 ;i < ORS;i++)
{
for (int j = 0; j < ORS - i -1; j++)
{
if (strcmp(student[j].Name, student[j + 1].Name) > 0) //b,a故而交换位置
{
//分数也要改变...
for (int ii = 0; ii < M; ii++)
{
int scoreflash; //分数临时变量
scoreflash = student[j].Score[ii];
student[j].Score[ii] = student[j + 1].Score[ii];
student[j + 1].Score[ii] = scoreflash;
}
//姓名也要随着改变...
char nameflash[20]; //临时转移姓名的数组
strcpy(nameflash,student[j].Name);
strcpy(student[j].Name,student[j + 1].Name);
strcpy(student[j + 1].Name,nameflash);
//学号重新排
char temp[20];
strcpy(temp,student[j].Student_Num);
strcpy(student[j].Student_Num, student[j + 1].Student_Num);
strcpy(student[j + 1].Student_Num, temp);
}
}
}
break;
default:
break;
//查看排序结果..
}
printf("新的排序结果是:\n");
for (int i = 0; i < ORS; i++)
{
printf("第%d个学生的学号是:%s\n",i + 1,student[i].Student_Num);
}
return 0;
}
/**********************************************/
//存储学生信息
/**********************************************/
int Save()
{
return 0;
}
/**********************************************/
//导出学生信息
/**********************************************/
int output()
{
return 0;
}
…代码有待优化、补充