学生管理系统(数组)-C语言

  • Post author:
  • Post category:其他


//学生管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 50
void menu();
void help();
void next(); 
void add_student(); 
void search_student();
void delete_student();
void display_student();
void modify_student();
void save_student();
void flush_student();
int peo_num = 0;
typedef struct STU
{
	char num[100];     //学号
	char name[100];    //姓名
	char sex[10];      //性别
	int age;           //年龄
	float score[3];    //成绩 
}student;
student stu[N]; 
int main()
{
	int number = 0;
	while(1)
	{
		menu(); 
		printf("请输入菜单编号:");
		scanf("%d", &number); 
		switch(number)
		{
			case 1:  help();           break;                      //使用帮助 
			case 2:  add_student();    break;                      //添加学生
			case 3:  search_student(); break;                      //查询学生 
			case 4:  delete_student(); break;                      //删除学生
			case 5:  save_student();   break;                      //保存学生
			case 6:  display_student();break;                      //展示所有学生 
			case 7:  modify_student(); break;                      //修改学生信息 
			case 8:  flush_student();  break;                      //刷新学生信息 
			case 9:  exit(0);          break;                      //退出 
			default: next();           break;
		} 
	}
}
void menu()          //显示菜单 
{
	system("cls");
	printf("\n");
	printf("********************************************************************************************\n");
	printf("*                                     学生信息管理系统                                     *\n");
	printf("********************************************************************************************\n");
	printf("****************************************系统功能菜单****************************************\n");
	printf("--------------------------------------------------------------------------------------------\n");
	printf("********************************************************************************************\n");
	printf("****           1、使用帮助                  ****               2、增加学生信息          ****\n");
	printf("********************************************************************************************\n");
	printf("****           3、查询学生信息              ****               4、删除学生信息          ****\n");
	printf("********************************************************************************************\n");
	printf("****           5、保存当前信息              ****               6、显示当前信息          ****\n");
	printf("********************************************************************************************\n");
	printf("****           7、修改学生信息              ****               8、刷新学生信息          ****\n");
	printf("********************************************************************************************\n");
	printf("****           9、退出系统                  ****            ====》待开发模块《====      ****\n");
	printf("********************************************************************************************\n");
	printf("--------------------------------------------------------------------------------------------\n");
}
//使用帮助 
void help()
{
	system("cls");
	printf("\n          这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项:                \n");
    printf("\n                                        注意事项:                                         \n");
    printf("\n               1、请根据提示进行操作!                                                    \n");
    printf("\n               2、初次使用请先选择增加学生信息!                                          \n");
    printf("\n               3、修改或者增加学生信息后切记保存!                                        \n");
    printf("\n               4、如果数据有错误,请先修改再保存!                                        \n");
    printf("\n               5、若您之前使用过,下次进入系统请先刷新学生信息!                          \n");
    printf("\n               6、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!\n");
    printf("\n               7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
    printf("\n                  “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
    printf("\n                  该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!    \n");
    printf("\n               8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等! \n");
    printf("\n               9、使用遇到任何问题请与我们联系,电话:110、119、120\n");
    printf("\n              10、最后感谢您的使用!                                                      \n");
    system("pause");    //让系统暂停
}
//待开发模块 
void next()
{
	system("cls");
	printf("\n");
	printf("********************************************************************************************\n");
	printf("****                               ====》此模块待开发《====                             ****\n");
	printf("********************************************************************************************\n");
	system("pause");    //让系统暂停
}
//增加学生 
void add_student()   
{
	int m;   //添加人员数
	printf("\n请输入待添加的学生人数:");
	scanf("%d", &m);
	int j = 1; 
	while(m--)
	{
		int flag = 1;   //用于判断学号是不是重复的标志位 如果重复则会重新输入 
		printf("%d\n", peo_num);
		while(flag != 0)
		{
			flag = 0;
			printf("\n请输入第%d位学生的学号:", j);
			scanf("%s", &stu[peo_num].num);   //用gets可以输入空格  这里必须有值0-9
			for(int k = 0; k < peo_num; k++)
			{
				if(strcmp(stu[peo_num].num, stu[k].num) == 0)
				{
					printf("\n该学号已存在,请重新输入!!\n");
					flag = 1;
					break;
				}
			}
		}
		printf("\n请输入第%d位学生的姓名:", j);
		getchar();     //第一次使用gets时需要清空缓存 
//		fflush(stdin); //第一次使用gets时需要清空缓存
		gets(stu[peo_num].name);
		printf("\n请输入第%d位学生的性别:", j);
		gets(stu[peo_num].sex);
		printf("\n请输入第%d位学生的年龄:", j);
		scanf("%d", &stu[peo_num].age);
		printf("\n请输入第%d位学生C语言成绩:", j);
        scanf("%f", &stu[peo_num].score[0]);
        printf("\n请输入第%d位学生高等数学成绩:", j);
        scanf("%f", &stu[peo_num].score[1]);
        printf("\n请输入第%d位学生大学英语成绩:", j);
        scanf("%f", &stu[peo_num].score[2]);
		j++;
		peo_num++;
	} 
	printf("添加成功!");
	system("pause");
}
//查询学生信息
void search_student()
{
	system("cls");
	int label = 0; //查询标签 
	char s1[100];  //查询输入的信息 
	printf("********************************************************************************************\n");
	printf("*-------------------------------------1、按学号查询----------------------------------------*\n");
	printf("*-------------------------------------2、按姓名查询----------------------------------------*\n");
	printf("*-------------------------------------3、退出本菜单----------------------------------------*\n");
	printf("********************************************************************************************\n");
	while(1)
	{
		int flag = 0;
		printf("\n请输入要执行的操作序号:"); 
		scanf("%d", &label);
		switch(label)
		{
			case 1:
				printf("\n请输入要查询的学号:");
				scanf("%s", s1);
				if(strlen(s1) == 0) break;
				for(int i = 0; i < peo_num; i++)
				{
					if(strcmp(stu[i].num, s1) == 0)
					{
						flag = 1;
						printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
                    	printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
					}
				}
				break;
			case 2:
				printf("\n请输入要查询的姓名:");
				scanf("%s", s1);
				for(int i = 0; i < peo_num; i++)
				{
					if(strcmp(stu[i].name, s1) == 0)
					{
						flag = 1;
						printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
                    	printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
					}
				}
				break;
			case 3: return ;
			default : printf("\n请在1---3之间输入!");break;
		}
		if(flag == 0)
			printf("\n找不到该学生,请检查后重新输入!!");
	}
}
//删除学生 
void delete_student()
{
	char s1[100];
	printf("\n请输入要删除的学号:");
	scanf("%s", s1);
	int flag = 0;
	for(int i = 0; i < peo_num; i++)
	{
		if(strcmp(stu[i].num, s1) == 0)
		{
			flag = 1;
			for(int j = i; j < peo_num - 1; j++)
			{
				stu[j] = stu[j+1];
			}
		}
		if(flag == 1) break;
	}
	if(flag == 0)
		printf("\n未找到该学生!");
	if(flag == 1)
	{
		printf("\n删除成功!!");
		memset(&stu[peo_num], 0, sizeof(student));
		peo_num--; 
	}
	system("pause");
}
//展示所有学生信息 
void display_student()
{
	if(peo_num == 0)
		printf("\n现在暂无学生信息,请先添加学生信息!");
	else
	{	
		printf("\n班级一共有%d名学生", peo_num);
		printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
		for(int i = 0; i < peo_num; i++)
		{
			printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);	
		}
		printf("\n");			
	}
	system("pause");
}
//修改学生信息
void modify_student()
{
	char s1[100];
	int laber = 0;
	int flag, age, num, i;
	char number[100], sex[10];
	int score1, score2, score3;
	printf("\n请输入需要修改学生姓名:");
	getchar();
	gets(s1);
	while(1)
	{
		int flag = 0;
		for(int i = 0; i < peo_num; i++)
		{
			if(strcmp(stu[i].name, s1) == 0)
			{
				flag = 1;
				system("cls");
				printf("********************************************************************************************\n");
				printf("*--------------1、修改学号------------------------------------ 2、修改性别-----------------*\n");
				printf("*--------------3、修改年龄------------------------------------ 4、修改C语言成绩------------*\n");
				printf("*--------------5、修改高数成绩-------------------------------- 6、修改英语成绩-------------*\n");
				printf("*---------------------------------------7、退出菜单----------------------------------------*\n");
				printf("********************************************************************************************\n");
				printf("\n请输入菜单编号:");
				scanf("%d", &laber);
				switch(laber)
				{
					case 1:
	                    printf("\n请输入新学号:");
	                    getchar();
	                    gets(number);
	                    strcpy(stu[i].num, number);
	                    break;
	                case 2:
	                    printf("\n请输入性别:");
	                    getchar();
	                    gets(sex);
	                    strcpy(stu[i].sex, sex);
	                    break;
	                case 3:
	                    printf("\n请输入年龄:");
	                    scanf("%d", &age);
	                    stu[i].age = age;
	                    break;
	                case 4:
	                    printf("\n请输入C语言成绩:");
	                    scanf("%f", &score1);
	                    stu[i].score[0] = score1;
	                    break;
	                case 5:
	                    printf("\n请输入高数成绩:");
	                    scanf("%f", &score2);
	                    stu[i].score[1] = score2;
	                    break;
	                case 6:
	                    printf("\n请输入英语成绩:");
	                    scanf("%f", &score3);
	                    stu[i].score[2] = score3;
	                    break;
	                case 7:return;
	                default:printf("\n请输入1--7之间的数字!");
                }
                if(laber > 0 && laber < 8)
                	printf("\n修改成功\n"); 
                break;
			}
		}
		if(flag == 0)
		{
			printf("\n未找到该学生,请重新输入需要修改学生姓名:");
			getchar();
			gets(s1);
		}
	}
}
//保存学生信息
void save_student()
{
	FILE *fp;
	char filename[100];
	printf("\n请输入要保存的文件名:");
	scanf("%s", filename);
	if((fp = fopen(filename, "w+")) == NULL)
	{
		printf("\n打开文件失败!\n");
		exit(0);
	}
	for(int i = 0; i < peo_num; i++)
	{
		if(fwrite(&stu[i], sizeof(struct STU), 1, fp) != 1)
			printf("\n保存失败!\n");
	}
	printf("\n保存成功!\n");
	fclose(fp);
	system("pause");
}
 //刷新学生信息
void flush_student()   
{
    FILE* fp;
    char filename[100];
    int k = 0;
    printf("\n请输入需要刷新的文件名:");
    getchar();
    gets(filename);
    if ((fp = fopen(filename, "r+")) == NULL)
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (int i = 0; i < N; i++)
    {
        if (fread(&stu[i], sizeof(student), 1, fp) == 1)
        {
            k++;
        }
    }
    peo_num = k;
    if (k == 0) 
		printf("刷新失败!\n");
    else 
		printf("刷新成功!\n");
    fclose(fp);
    system("pause");
}



版权声明:本文为qq_41301428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。