#include <stdio.h>
#define N 40
//学生信息的结构体
typedef struct __Student{
int id;//学号
char name[32]; //姓名
int score; //成绩
}stu_t;
//班级的结构体
typedef struct __Class{
stu_t person[N];//管理学生信息的结构体数组
int count; //记录班级已有的人数
}class_t;
//函数的声明
void print_menu();
int insert_student(class_t *my_class);
int delete_student(class_t *my_class);
int modify_student(class_t *my_class);
int search_student(class_t *my_class);
int sort_student(class_t *my_class);
void printf_all(class_t *my_class);
int main(int argc, const char *argv[])
{
printf("欢迎使用学生信息管理系统\n");
class_t my_class;
my_class.count = 0;
int choose = 0;
while(1){
print_menu();
scanf("%d", &choose);
switch(choose){
case 1:
insert_student(&my_class);
break;
case 2:
delete_student(&my_class);
break;
case 3:
modify_student(&my_class);
break;
case 4:
search_student(&my_class);
break;
case 5:
sort_student(&my_class);
break;
case 6:
printf_all(&my_class);
break;
}
if(choose>6){
break;
}
}
printf("欢迎下次使用..\n");
return 0;
}
//打印菜单的函数
void print_menu(){
printf("\n\n");
printf("---------------------------------------------------------\n");
printf("| 1.添加 2.删除 3.修改 4.查找 5.排序 6.打印 7.退出|\n");
printf("---------------------------------------------------------\n");
printf("请输入你的选择:");
}
//添加学员信息的函数
int insert_student(class_t *my_class){
if(N == my_class->count){
printf("班级人数已满,添加失败\n");
return -1;
}
int ID=0;
while (1)
{
if(N == my_class->count){
printf("班级人数已满,添加失败\n");
return -1;
}
NEXT:
printf("请输入新学员的学号(学号小于1退出输入):");
scanf("%d",&ID);
if(ID<1){
printf("学生信息输入结束!\n");
return 0;
}
//检验新学员学号是否曾输入,是则警告且拒绝输入,否则输入成功
for (int i=0; i<my_class->count; i++)
{
if(my_class->person[i].id == ID){
printf("学号%d已被使用,请重新输入!\n",ID);
goto NEXT;
}
}
my_class->person[my_class->count].id = ID;
printf("请输入新学员的姓名:");
scanf("%s",my_class->person[my_class->count].name);
printf("请输入新学员的成绩:");
scanf("%d",&my_class->person[my_class->count].score);
printf("学员信息添加成功\n\n");
my_class->count++;
printf_all(my_class);
}
return 0;
}
//删除学员信息的函数
int delete_student(class_t *my_class){
if (0 == my_class->count)
{
printf("班级人数已为0,删除失败\n");
return -1;
}
printf("请输入需要删除的学员的学号:");
int ID=0;
int i=0;
int flag=0; //标识是否找到需要删除的学员。
scanf("%d",&ID);
for (i=0; i<my_class->count; i++)
{
if(0 != flag){
my_class->person[i-flag] = my_class->person[i];
}
if(my_class->person[i].id == ID)
flag++;
}
if(0 == flag){
printf("不存在学号为%d的学员,删除失败!\n",ID);
return -1;
}
my_class->count--;
printf("已删除学号为%d的学员信息\n",ID);
printf_all(my_class);
return 0;
}
//修改学员信息的函数:
int modify_student(class_t *my_class){
int ID=0;
int i=0;
int flag = 0;
if(0 == my_class->count){
printf("学员信息为空,无法修改!\n");
return -1;
}
printf("请输入需要修改的学员的学号:");
scanf("%d",&ID);
for (i=0; i<my_class->count; i++)
{
if(ID == my_class->person[i].id){
flag=1;
break;
}
}
if(0 == flag){
printf("未找到学号为%d的学员信息,修改失败!\n",ID);
printf_all(my_class);
return -1;
}
stu_t temp;
printf("请输入需要修改成的信息(id name score):");
scanf("%d%s%d",&(temp.id),temp.name,&(temp.score));
my_class->person[i]=temp;
printf("学员信息修改成功!\n");
printf_all(my_class);
return 0;
}
//查找学生信息
int search_student(class_t *my_class){
int i=0;
int flag=0;
int ID;
if(0 == my_class->count){
printf("学员信息为空!\n");
return -1;
}
printf("请输入需要查找的学员学号:");
scanf("%d",&ID);
for (i=0; i<my_class->count; i++)
{
flag=1;
if(ID == my_class->person[i].id){
printf("找到学员信息如下:\n姓名:%s\n成绩:%d\n",\
my_class->person[i].name,my_class->person[i].score);
break;
}
}
if(0 == flag){
printf("未找到学号为%d的学员信息!\n",ID);
return -1;
}
return 0;
}
//学生成绩排序
int sort_student(class_t *my_class){
int i=0;
if(0 == my_class->count){
printf("学员信息为空\n");
return -1;
}
stu_t temp;
for (int i=0; i<my_class->count-1; i++)
{
for (int j=0; j<my_class->count-i-1; j++)
{
if(my_class->person[j].score<my_class->person[j+1].score){
temp = my_class->person[j];
my_class->person[j] = my_class->person[j+1];
my_class->person[j+1] = temp;
}
}
}
printf("排序完成!\n");
printf_all(my_class);
return 0;
}
//学生信息输出
void printf_all(class_t *my_class){
printf("-------------------------\n");
printf("| 学号 | 姓名 | 成绩 |\n");
printf("-------------------------\n");
for (int i=0; i<my_class->count; i++)
printf("|%4d | %-6s| %-3d |\n",my_class->person[i].id,\
my_class->person[i].name,my_class->person[i].score);
printf("-------------------------\n");
}
基于C语言的学生信息管理系统
最新推荐文章于 2024-10-06 22:04:10 发布