作业(二):简易学生管理系统

简易学生管理系统

1、框架构思:

整体基础框架知识由(文件指针、循环、判断、函数调用)实现。
各自功能函数名:

void first_include(); 
void found_message();//遍历一个,主要创建文件! 
void input_message();//继续遍历学生信息 
void read_message();//直接查询全体 
void read_messages();//直接查询全体  

这里void与int区别不做解析(有无返回值区别)

2、实现路径

直接上流程图不废话
在这里插入图片描述

查询结果
在这里插入图片描述

附属代码:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h" 

typedef struct Student {
	int Std_Age;//定义学生年龄
	char Std_Id[10],Std_Name[10],Std_Sex;//这里定义学生学号ID与姓名长度为10,性别
}Student;

//这里开始写入信息
void first_include(); 
void found_message();//遍历一个,主要创建文件! 
void input_message();//继续遍历学生信息 
void read_message();//直接查询全体 
void read_messages();//直接查询全体  

void first_include(){
	printf("\n\n");
	printf("\t\t================欢迎进入学生管理系统================\n");
	printf("\t\t=\t\t1.创建学生信息\t\t\t   =\n");
	printf("\t\t=\t\t2.新增学生信息\t\t\t   =\n");
	printf("\t\t=\t\t3.查询单个学生信息\t\t   =\n");
	printf("\t\t=\t\t4.查询全体学生信息\t\t   =\n");
	printf("\t\t=\t\t0.退出系统\t\t\t   =\n");
	printf("\t\t====================================================\n");
	printf("\t\t请输入您的选择:");
}

int main() {
	int Select;
	while(1){
		first_include();
		scanf("%d",&Select);
		
		switch(Select){
			case 1:system("cls");printf("请输入文件名称:");found_message(); break;
			case 2:system("cls");printf("请输入文件名称:");input_message(); break;
			case 3:system("cls");printf("请输入文件名称:");read_message(); break;
			case 4:system("cls");printf("请输入文件名称:");read_messages(); break;
			case 0:return 0;
		}
	} 
	return 0;
}

void found_message(){//遍历一个先,主要创建文件! 
	FILE* fp;
	Student Std;
	int i = 0,flag = 1;
	char ch,Ch[20],t;	
	scanf("%s", Ch);
	getchar();
	fp = fopen(Ch, "r");
	if (fp == NULL) {
		printf("文件不存在!\n");
		printf("是否创建文件(Y/N):");
		scanf("%c", &ch);
		if (ch == 'Y') {
			fopen(Ch, "w");
		}
		else if (ch != 'Y') {
			system("pause");
			exit(0);
		}
	}
	else{
		fp = fopen(Ch,"w");
		printf("请输入学生学号:");
		scanf("%s", Std.Std_Id);
		getchar();
		printf("请输入学生姓名:");
		scanf("%s", Std.Std_Name);
		getchar();
		while(1){
			fflush(stdin);
			printf("请输入学生性别(W|M):");
			Std.Std_Sex = getchar();
			if(Std.Std_Sex=='W'||Std.Std_Sex=='M')
				break;
		}
		
		printf("请输入学生年龄:");
		scanf("%d", &Std.Std_Age);
		fwrite(&Std, sizeof(Std), 1, fp);
	}
	fclose(fp);	
}

void input_message(){//继续添加 
	FILE *fp;
	Student Std;
	char Ch[20],Id[11];
	scanf("%s", Ch);
	getchar();
	fp = fopen(Ch,"a");
	if(fp==NULL){
		printf("文件不存在");
		exit(0);
	}
	else{
		while(1){
			int flag = 0;
			fflush(stdin);
			printf("请输入学生学号:");
			scanf("%s", Id);
			getchar();
			fp = fopen(Ch,"r");
			while(fread(&Std,sizeof(Std),1,fp)){
				if((strcmp(Id,Std.Std_Id)==0)){//两者相同的时候 
					flag = 1;
				}
			}
			fclose(fp); 
			if(flag==0)break;//Id值没有相同 
		}
		strcpy(Std.Std_Id,Id); 
		printf("请输入学生姓名:");
		scanf("%s", Std.Std_Name);
		getchar();
		while(1){
			fflush(stdin);
			printf("请输入学生性别(W|M):");
			Std.Std_Sex = getchar();
			if(Std.Std_Sex=='W'||Std.Std_Sex=='M')
				break;
		}
		
		printf("请输入学生年龄:");
		scanf("%d", &Std.Std_Age);
		fp = fopen(Ch,"a");
		fwrite(&Std, sizeof(Std), 1, fp);
	}
	fclose(fp);
}

void read_message(){//查询单个
	FILE* fp;
	Student Std;
	int i;
	char Ch[20],ch[20],*t;
	scanf("%s",Ch);
	getchar();
	fp = fopen(Ch,"r");
	if(fp==NULL){
		printf("文件不存在!");
		exit(0);
	} 
	else{
		printf("输入学号查询:");
		scanf("%s",ch);
		getchar();
		while(fread(&Std,sizeof(Std),1,fp)){
			t = Std.Std_Id;
			if(strcmp(t,ch)==0){
				printf("学号\t姓名\t   性别\t     年龄\n");
				printf("%s\t%s\t%c%10d\n",Std.Std_Id,Std.Std_Name,Std.Std_Sex,Std.Std_Age);
			}
			else{
				printf("该学号不存在!");
			}
		}
	}
}

void read_messages(){//直接查询全体 
	FILE* fp;
	Student Std;
	int i;
	char Ch[20];
	scanf("%s",Ch);
	getchar();
	fp = fopen(Ch,"r");
	if(fp==NULL){
		printf("文件不存在!");
		exit(0);
	} 
	else{
		printf("          学号          姓名          性别          年龄\n");
		while(fread(&Std,sizeof(Std),1,fp)){
			printf("     %s          %s          %c          %d\n",Std.Std_Id,Std.Std_Name,Std.Std_Sex,Std.Std_Age);
		}
	}
}

代码可能存在BUG,请各位大神加以指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知名的MasaNvi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值