C语言编写学生信息管理系统

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<time.h>
#define MAX_INDEX 100

/*定义一个学生信息的结构体,
由于C语言没有面向对象还是有点难受的*/
typedef struct
{
	char id[20];
	char name[20];
	char sex[5];
	int age;
}STU;

void return_menau();//返回主菜单
void print_menau();//打印主菜单
int select_menau();//接收键入的编号并返回编号以调用
int get_student_info(STU stu[]);//先输入要录入个数,录入信息,返回个数
void ls_info(STU stu[],int n);//列出所有学生的信息
void search_info_by_name(STU stu[],int n);//通过名字查找学生信息
void search_info_by_id(STU stu[],int n);//通过学号查找学生信息
void change_info_by_id(STU stu[],int n);//搜学号找到该学生并修改ta的信息
int del_by_id(STU stu[],int n);//通过学号删除改学生的信息
int add_info(STU stu[],int n);//增加一位学生,并插入到某个位置
void save_info(STU stu[], int n);//把学生信息保存到txt文件
void load_info(STU stu[], int n);//从txt文件中读取学生信息
int find_name(STU stu[],int n,char *s);//通过名字找到结构体数组中该学生的下标并返回下标
int find_id(STU stu[],int n,char *s);//通过学号找到结构体数组中该学生的下标并返回下标
void guess_student(STU stu[],int n);//给出学号猜学生的名字

//调用函数列表
void return_menau()
{
	char mistake[20];//设立一个数组防止错误的键入
	printf("按回车键返回主菜单...\n");
	gets(mistake);
	return;
}
// 显示菜单
void print_menau()
{
	printf("###############主菜单##############\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("         11. 退出程序\n");
	printf("###################################\n");
	return;
}
// 选择菜单编号
int select_menau()
{
	print_menau();
	printf("\n请输入你要选择的编号(1-10): ");
	int your_input;
	while(1)
	{
		scanf("%d",&your_input);
		getchar();
		if(your_input>10 || your_input<1)
		{
			system("cls");
			print_menau();
			printf("\n你输入的编号无效,请重新输入:");
			continue;
		}
		else
			break;
	}
	return your_input;
}
//输入学生信息
int get_student_info(STU stu[])
{
	int i,n;
	system("cls");
	printf("\n请输入你要记录的学生的数量\n");
	scanf("%d",&n);
	system("cls");
	printf("请输入%d位学生的信息:\n",n);
	printf("请按以下顺序进行学生信息的输入\n");
	printf("学号    姓名    性别     年龄\n");
	for(i=0;i<n;i++)
	{
		scanf("%s",stu[i].id);
		scanf("%s",stu[i].name);
		scanf("%s",stu[i].sex);
		scanf("%d",&stu[i].age);
		getchar();
		//为了美观起见,每输入一个学生显示一个,最后不显示这一列
		if(i!=n-1)
			printf("学号    姓名    性别     年龄\n");
	}
	printf("信息正在录入...\n");
	sleep(2);
	printf("你输入的信息已录入系统...\n");
	if(i==n)
	{
		printf("信息全部录入了哈!");
	}
	else
	{
		printf("你输入的多了或者少了哦!老铁");
	}
	return n;
}
//显示学生信息
void ls_info(STU stu[],int n)
{
	int i;
	system("cls");
	if(n == 0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return;
	}
	printf("\n##################学生清单##################\n");
	printf("学号          姓名          性别          年龄\n");
	printf("\n############################################\n");
	for(i=0;i<n;i++)
	{
		printf("%-14s%-14s%-14s%-14d\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age);
		//每显示10个学生按回车向后翻页
		if ((i + 1) % 10 == 0)
        {
            printf("---------------------------------------------\n");
            printf("每次显示10个学生的信息,按回车继续获得剩下的...\n");
            getchar();
            system("cls");
            printf("\n*******************学生清单*******************\n");
            printf("学号          姓名          性别          年龄\n");
            printf("---------------------------------------------\n");
        }
	}
	printf("\n");
	return;
}
//按学生名字进行查询学生信息
void search_info_by_name(STU stu[],int n)
{
	char temp[20];
	int i;
	system("cls");
	if(n==0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return;
	}
	printf("请输入查找的学生的名字:\n");
    scanf("%s", temp);
    getchar();
    i = find_name(stu, n, temp);
    if(i > n - 1)
    {
    	printf("没有名字为%s的学生..\n",temp);
	}
	else
	{
		printf("嗱!这是你要的!\n");
		printf("%s\n",stu[i].id);
		printf("%s\n",stu[i].name);
		printf("%s\n",stu[i].sex);
		printf("%d\n",stu[i].age);
	}
	return;
}
//通过学号进行学生信息查询
void search_info_by_id(STU stu[],int n)
{
	system("cls");
	if(n == 0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return;
	}
	char s[20];
	printf("请输入你要查询的学生的学号:\n");
	scanf("%s",s);
	int flag = 0;
	for(int i=1;i<=n;i++)
	{
		if(strcmp(stu[i].name,s)==0)
		{
			flag = 1;
			printf("嗱!这是你要的!\n");
			printf("%s\n",stu[i].id);
			printf("%s\n",stu[i].name);
			printf("%s\n",stu[i].sex);
			printf("%d\n",stu[i].age);
		}
	}
	if(!flag)
	{
		printf("你要查询的学号为%s的学生不存在!\n",s);
	}
	return;
}
// 通过学号进行学生信息的修改
void change_info_by_id(STU stu[],int n)
{
	if(n == 0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return;
	}
	system("cls");
	char s[20];
	int i;
	printf("请输入你要修改的学生的想学号:\n");
	scanf("%s",s);
	i = find_id(stu, n, s);
	if(i == n)
	{
		printf("没有找到学号为%s的学生哇!\n",s);
	}
	else
	{
		printf("学号为%s的学生信息修改前为:\n",s);
		printf("%s\n",stu[i].id);
		printf("%s\n",stu[i].name);
		printf("%s\n",stu[i].sex);
		printf("%d\n",stu[i].age);
		printf("\n");
		printf("请输入要修改的信息:\n");
		printf("学号    姓名    性别     年龄\n");
		scanf("%s", stu[i].id);
        scanf("%s", stu[i].name);
        scanf("%s", stu[i].sex);
        scanf("%d", &stu[i].age);
        getchar();
	}
	system("cls");
	printf("正在修改学号为%s的学生的信息...\n",s);
	sleep(2);
	system("cls");
	printf("       修改成功\n");
	printf("修改后的信息为:\n");
	printf("%s\n",stu[i].id);
	printf("%s\n",stu[i].name);
	printf("%s\n",stu[i].sex);
	printf("%d\n",stu[i].age);
	return;
}
int del_by_id(STU stu[],int n)
{
	char s[20];
	int i;
	system("cls");
	if(n == 0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return n;
	}
	printf("请输入你要删除的学生的学号:\n");\
	scanf("%s",s);
	getchar();
	i = find_name(stu, n ,s);
	if(i==n)
	{
		printf("没有找到学号为%s的学生哇!\n", s);
	}
	else
	{
		printf("正在删除学号为%s的学生...\n",s);
		sleep(2);
		//此学生后面的学生都向前移动一位,来实现删除
		for(;i<n;i++)
		{
			strcpy(stu[i].name,stu[i+1].name);
			strcpy(stu[i].id,stu[i+1].id);
			strcpy(stu[i].sex, stu[i + 1].sex);
            stu[i].age = stu[i + 1].age;
		}
		//学生的总数减一了哈!
		n--;
		printf("删除成功了哈!\n");
	}
	return n;
}
//增加学生
int add_info(STU stu[],int n)
{
	system("cls");
	if(n == 0)
	{
		printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
		return n;
	}
	STU temp;
	int i;
	char s[20];
	printf("请输入你想要增加的学生的信息:\n");
	printf("  学号    姓名    性别     年龄\n");
	scanf("%s", temp.id);
    scanf("%s", temp.name);
    scanf("%s", temp.sex);
    scanf("%d", &temp.age);
    getchar();
    if(n>0)
    {
    	printf("请输入你想要查到哪个学生的后面,输入ta的姓名哈:\n");
    	scanf("%s",s);
    	getchar();
    	i = find_name(stu, n , s);
	}
	else
	{
		i = 0;
	}
	printf("正在插入学生信息...");
	//利用该位置以后的学生都向后移动一位以实现增加学生
	for(int j=n-1;j>=i;j--)
	{
		strcpy(stu[i + 1].id, stu[i].id);
        strcpy(stu[i + 1].name, stu[i].name);
        strcpy(stu[i + 1].sex, stu[i].sex);
        stu[i + 1].age = stu[i].age;
	}
	//增加当前输入的学生哈!
	strcpy(stu[i].id, temp.id);
    strcpy(stu[i].name, temp.name);
    strcpy(stu[i].sex, temp.sex);
    stu[i].age = temp.age;
    //学生总数加一了
    n++;
    printf("此学生信息插入成功!\n");
    return n;
}
//保存学生信息到txt文件
void save_info(STU stu[], int n)
{
	system("cls");
	int i;
	FILE *fp;
	if((fp = fopen("D://学生信息管理系统.txt","wb")) == NULL)
	{
		printf("无法打开学生信息系统文件!\n");
		exit(1);
	}
	printf("\n正在保存...\n");
	fprintf(fp, "%d", n);
	fprintf(fp, "\r\n");
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%-14s%-14s%-14s%-14d", stu[i].id, stu[i].name, stu[i].sex, stu[i].age);
		fprintf(fp, "\n");
    }
	fclose(fp);
	sleep(1);
	system("cls");
	printf("保存成功!\n");
	return ;

}
//从txt文件读取学生信息
void load_info(STU stu[])
{
	int i,n;
	FILE *fp;
	if ((fp = fopen("D://学生信息管理系统.txt", "rb")) == NULL)
    {
        printf("无法打开学生信息系统文件!\n");
        exit(1);
    }
    fscanf(fp, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(fp, "%14s%14s%14s%14d", stu[i].id, stu[i].name, stu[i].sex, &stu[i].age);
    fclose(fp);
    printf("成功加载学生信息!\n");
    return ;
}
// 找名字并返回所在的位置,没有则返回总数以判断
int find_name(STU stu[],int n,char *s)
{
	int i = 0;
	for(i=0;i<n;i++)
	{
		if(strcmp(s,stu[i].name) == 0)
			return i;
	}
	return i;
}
// 找id并返回所在位置,没有则返回总数以判断
int find_id(STU stu[],int n,char *s)
{
	int i = 0;
	for(i=0;i<n;i++)
	{
		if(strcmp(s,stu[i].id) == 0)
			return i;
	}
	return i;
}
void guess_student(STU stu[],int n)
{
	srand(time(NULL));
	int random_number = int(rand()%n);
	printf("%d\n",random_number);
	printf("请你猜一下学号为%s的同学是谁\n",stu[random_number].id);
	printf("请输入0或1并敲回车,0表示揭晓答案,1表示继续猜,2表示不玩了\n");
	int choice;
	scanf("%d",&choice);
	getchar();
	if(choice==0)
		printf("%s\n", stu[random_number].name);
	else if(choice==1)
	{
		guess_student(stu,n);
	}
	else
	{
		return;
	}

}
//main函数
int main(int argc, char const *argv[])
{
	STU stu[MAX_INDEX];
	int len = 0;
	while(1)//无限循环等到退出
	{
		system("cls");
		//利用switch语句进行编码的选择以调用函数
		switch(select_menau())
		{
			case 1:
				len = get_student_info(stu);
				break;
			case 2:
				ls_info(stu,len);
				break;
			case 3:
				search_info_by_name(stu,len);
				break;
			case 4:
				search_info_by_id(stu,len);
				break;
			case 5:
				len = del_by_id(stu,len);
				break;
			case 6:
				change_info_by_id(stu,len);
				break;
			case 7:
				len = add_info(stu,len);
				break;
			case 8:
				save_info(stu,len);
				break;
			case 9:
				load_info(stu);
				break;
			case 10:
				guess_student(stu,len);
				break;
			case 11:
				exit(0);
				break;
		}
		return_menau();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值