main.c
#include "fun.h"
enum keys
{
//log:录入 bro:浏览 find:查找 chan:修改 add:增加 del:删除 exit:退出
log=1,bro,find,chan,add,del,exit_
}key;
int main(void)
{
//初始化
init();
int i;
while (1)
{
printf("请输入功能编号:");
scanf("%d", &i);
getchar();
switch (i)
{
case log:
//学生信息录入
login();
break;
case bro:
//学生信息浏览
brow();
break;
case find:
//学生信息查找
finds();
break;
case chan:
//学生信息修改
change();
break;
case add:
//学生信息增加
add_s();
break;
case del:
//学生信息删除
dele();
break;
case exit_:
//退出系统
exit(0);
}
}
return 0;
}
fun.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STUMAX 1024
//成绩结构体
struct grade
{
int math;
int eng;
int aut;
};
typedef struct grade GRA;
//学生结构体
struct students
{
char* name;
char* sex;
char* stu_num;
char* tel;
struct grade stu_gra;
};
typedef struct students STU;
//班级结构体
struct classes
{
char c_name[256];
struct students class_stus;
};
typedef struct classes CLA;
//声明函数
void login();
void brow();
void finds();
void dele();
void add_s();
void change();
fun.c
#include "fun.h"
//初始化
void init()
{
printf("===========================学生信息管理系统===================\n");
printf("===========================1.学生信息录入=====================\n");
printf("===========================2.学生信息浏览=====================\n");
printf("===========================3.学生信息查找=====================\n");
printf("===========================4.学生信息修改=====================\n");
printf("===========================5.学生信息增加=====================\n");
printf("===========================6.学生信息删除=====================\n");
printf("===========================7.退出系统=========================\n");
}
//学生信息录入
void login()
{
//以写的方式打开文件,然后关闭(初始化学生信息文件)
FILE* fp = fopen("stu.txt", "w");
if (!fp)
return -1;
fclose(fp);
//(给学生信息开辟堆空间)
STU* stus = (STU*)malloc(sizeof(STU) * STUMAX);
//定义变量
char buf[1024];//中间变量
int i = 0;
int temp;//中间变量
int count = 0;//存储学生个数
while (1)
{
//录入学生各个信息
printf("输入“comm=exit”结束信息录入\n");
printf("请输入学生姓名:\t");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
if (!strncmp(buf, "comm=exit", 9))
break;
count++;
stus[i].name = (char*)malloc(strlen(buf) + 1);
strcpy(stus[i].name, buf);
printf("请输入学生性别:\t");
scanf("%[^\n]", buf);
getchar();
stus[i].sex = (char*)malloc(strlen(buf) + 1);
strcpy(stus[i].sex, buf);
printf("请输入学生学号:\t");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
stus[i].stu_num = (char*)malloc(strlen(buf) + 1);
strcpy(stus[i].stu_num, buf);
printf("请输入学生的电话号码:\t");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
stus[i].tel = (char*)malloc(strlen(buf) + 1);
strcpy(stus[i].tel, buf);
printf("请输入学生数学成绩:\t");
scanf("%d", &temp);
getchar();
stus[i].stu_gra.math = temp;
printf("请输入学生英语成绩:\t");
scanf("%d", &temp);
getchar();
stus[i].stu_gra.eng = temp;
printf("请输入学生自动控制成绩:\t");
scanf("%d", &temp);
getchar();
stus[i].stu_gra.aut = temp;
//以追加的方式打开文件,以标准格式写入学生信息,关闭文件
FILE* fp1= fopen("stu.txt", "a");
if (!fp1)
return -1;
fprintf(fp1, "姓名:%s 性别:%s 学号:%s 电话:%s 数学成绩:%d 英语成绩:%d 自动控制原理成绩:%d\n", stus[i].name, stus[i].sex, stus[i].stu_num, stus[i].tel, stus[i].stu_gra.math, stus[i].stu_gra.eng, stus[i].stu_gra.aut);
fclose(fp1);
i++;
}
//释放堆空间
for (int i = 0; i < count; i++)
{
free(stus[i].name);
free(stus[i].sex);
free(stus[i].stu_num);
free(stus[i].tel);
/*free(stus[i].stu_gra.aut);
free(stus[i].stu_gra.eng);
free(stus[i].stu_gra.math);*/
}
free(stus);
}
//学生信息浏览
void brow()
{
FILE* fp = fopen("stu.txt", "r");
if (!fp)
return -1;
char buf[1024] = {0};
while (!feof(fp))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp);
printf("%s\n", buf);
}
fclose(fp);
}
//学生信息查找
void finds()
{
printf("请输入您要查询学生的姓名:\n");
char arr[1024] = { 0 };
scanf("%s", arr);
getchar();
//len获取该同学姓名的长度
int len = strlen(arr);
FILE* fp = fopen("stu.txt", "r");
if (!fp)
return -1;
char buf[1024] = {0};
//是否找到该学生的标志,其为0表示未找到
int flag1 = 0;
while (!feof(fp))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp);
int flag = 0;
flag1 = 0;
int j = 0;
//字符串 "姓名:" 的长度为6
for (int i = 6; i < len + 6; i++)
{
if (buf[i] == arr[j])
{
flag++;
}
j++;
}
if (flag == len)
{
flag1 = 1;
printf("%s\n", buf);
break;
}
}
if(!flag1)
printf("未找到所查询的学生!\n");
fclose(fp);
}
//学生信息删除
void dele()
{
printf("请输入您要删除学生的姓名:");
char arr[1024] = { 0 };
scanf("%s", arr);
getchar();
int len = strlen(arr);
FILE* fp = fopen("stu.txt", "r");
if (!fp)
return -1;
char buf[1024] = { 0 };
int flag1 = 0;
while (!feof(fp))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp);
int flag = 0;
int j = 0;
for (int i = 6; i < len + 6; i++)
{
if (buf[i] == arr[j])
{
flag++;
}
j++;
}
if (flag == len)
{
flag1 = 1;
continue;
}
FILE* fp1 = fopen("stu1.txt", "a");
if (!fp1)
return -1;
fputs(buf, fp1);
fclose(fp1);
}
fclose(fp);
remove("stu.txt");
rename("stu1.txt", "stu.txt");
if (!flag1)
printf("未找到该学生!\n");
}
//添加学生信息
void add_s()
{
STU stus;
char buf[1024];
int i = 0;
int temp;
printf("请输入学生姓名:");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
stus.name = (char*)malloc(strlen(buf) + 1);
strcpy(stus.name, buf);
printf("请输入学生性别:\t");
scanf("%[^\n]", buf);
getchar();
stus.sex = (char*)malloc(strlen(buf) + 1);
strcpy(stus.sex, buf);
printf("请输入学生学号:\t");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
stus.stu_num = (char*)malloc(strlen(buf) + 1);
strcpy(stus.stu_num, buf);
printf("请输入学生的电话号码:\t");
memset(buf, 0, 1024);
scanf("%[^\n]", buf);
getchar();
stus.tel = (char*)malloc(strlen(buf) + 1);
strcpy(stus.tel, buf);
printf("请输入学生数学成绩:\t");
scanf("%d", &temp);
getchar();
stus.stu_gra.math = temp;
printf("请输入学生英语成绩:\t");
scanf("%d", &temp);
getchar();
stus.stu_gra.eng = temp;
printf("请输入学生自动控制成绩:\t");
scanf("%d", &temp);
getchar();
stus.stu_gra.aut = temp;
FILE* fp = fopen("stu.txt", "a+");
if (!fp)
return -1;
fprintf(fp, "姓名:%s 性别:%s 学号:%s 电话:%s 数学成绩:%d 英语成绩:%d 自动控制原理成绩:%d\n", stus.name, stus.sex, stus.stu_num, stus.tel, stus.stu_gra.math, stus.stu_gra.eng, stus.stu_gra.aut);
fclose(fp);
}
//修改学生信息
void change()
{
printf("请输入您要修改信息的学生姓名:");
char arr[1024] = { 0 };
scanf("%s", arr);
getchar();
int len = strlen(arr);
FILE* fp = fopen("stu.txt", "r");
if (!fp)
return -1;
char buf[1024] = { 0 };
int flag1 = 0;
while (!feof(fp))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp);
int flag = 0;
int j = 0;
for (int i = 6; i < len + 6; i++)
{
if (buf[i] == arr[j])
{
flag++;
}
j++;
}
if (flag == len)
{
flag1 = 1;
continue;
}
FILE* fp1 = fopen("stu1.txt", "a");
if (!fp1)
return -1;
fputs(buf, fp1);
fclose(fp1);
}
fclose(fp);
remove("stu.txt");
rename("stu1.txt", "stu.txt");
remove("stu1.txt");
if (flag1)
{
add_s();
}
else if (!flag1)
printf("未找到该学生!\n");
}