使用的是Visual Studio 2022
运行效果
头文件部分 head.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <string.h>
typedef struct Student
{
char id[20];
char name[10];
char sex[3];
int age;
char phone[20];
}Student;
void menu(void);
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int searchID(Student stu[], int count, Student ss);
int searchNAME(Student stu[], int count, Student ss);
//正常插入,返回学生数;否则,返回-1
int add(Student stu[], int count, Student ss);
//若输入的学号存在,正常修改,返回学生数,否则修改失败,返回 -1
int modify(Student stu[], int count, Student ss, int n);
//若输入的学号存在,完成删除,返回学生数,否则删除失败,返回 -1
int Delete(Student stu[], int count, Student ss);
//写入文件
void writeFile(Student stu[], int count);
//读取文件
int readFile(Student stu[]);
主函数部分的源文件 test.c
#include"head.h"
int main()
{
Student stu[50], ss;
int count = 0, i;
int choice, t = 1;
count = readFile(stu);
while (t)
{
again:
menu();
scanf("%d", &choice);
switch (choice)
{
case 1://增加信息
printf("请输入待增加的学生\n学号:");
scanf("%s", ss.id);
printf("姓名:");
scanf("%s", ss.name);
printf("性别:");
scanf("%s", ss.sex);
printf("年龄:");
scanf("%d", &ss.age);
printf("联系方式:");
scanf("%s", ss.phone);
i = add(stu, count, ss);
if (i != -1)
{
printf("插入成功\n");
count = i;
}
else
printf("插入失败,该学号已存在\n");
writeFile(stu, count);
Sleep(1000);
system("cls");
break;
case 2://修改信息
printf("请输入需要修改学生的学号:\n");
scanf("%s", ss.id);
i = searchID(stu, count, ss);
if (i != -1)
{
printf("学号\t姓名\t性别\t年龄\t联系方式\n");
printf("%s\t%s\t%s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age, stu[i].phone);
printf("请选择修改内容:\n");
printf("1.姓名\n2.性别\n3.年龄\n4.联系方式\n");
scanf("%d", &choice);
}
else
{
printf("%s 不存在,修改失败!\n", ss.id);
system("pause");
system("cls");
goto again;
}
switch (choice)//修改指定内容
{
case 1:
printf("请输入待修改的学生姓名:");
scanf("%s", ss.name);
i = modify(stu, count, ss, choice);
break;
case 2:
printf("请输入待修改的学生性别:");
scanf("%s", ss.sex);
i = modify(stu, count, ss, choice);
break;
case 3:
printf("请输入待修改的学生年龄:");
scanf("%d", &ss.age);
i = modify(stu, count, ss, choice);
break;
case 4:
printf("请输入待修改的学生联系方式:");
scanf("%s", ss.phone);
i = modify(stu, count, ss, choice);
break;
default:
printf("选择错误,请重新选择!!!\n");
system("pause");
system("cls");
goto again;
}
if (i == -1)
{
printf("%s 不存在,修改失败!\n", ss.id);
system("pause");
system("cls");
}
else
{
printf("修改成功\n");
Sleep(1000);
system("cls");
}
writeFile(stu, count);
break;
case 3://删除信息
printf("请输入待删除的学生学号:");
scanf("%s", ss.id);
i = Delete(stu, count, ss);
if (i != -1)
{
printf("删除成功\n");
Sleep(1000);
system("cls");
count = i;
}
else
{
printf("%s 不存在,删除失败\n", ss.id);
system("pause");
system("cls");
}
writeFile(stu, count);
break;
writeFile(stu, count);
Sleep(1000);
system("cls");
break;
case 4:
{
printf("\n1.输入学号查找\n2.输入姓名查找\n");
scanf("%d", &choice);
switch (choice)
{
case 1://按学号查找
printf("请输入学号:");
scanf("%s", ss.id);
i = searchID(stu, count, ss);
if (i != -1)
{
printf("学号\t姓名\t性别\t年龄\t联系方式\n");
printf("%s\t%s\t%s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age, stu[i].phone);
system("pause");
system("cls");
}
else
{
printf("%s 不存在!\n", ss.id);
system("pause");
system("cls");
}
break;
case 2://按姓名查找
printf("请输入姓名:");
scanf("%s", ss.name);
i = searchNAME(stu, count, ss);
if (i != -1)
{
printf("学号\t姓名\t性别\t年龄\t联系方式\n");
printf("%s\t%s\t%s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age, stu[i].phone);
system("pause");
system("cls");
}
else
{
printf("%s 不存在!\n", ss.name);
system("pause");
system("cls");
}
break;
default:
{
printf("选择错误!!!");
Sleep(1000);
system("cls");
}
}
break;
}
case 5://显示全部信息
if (count == 0)
printf("目前暂无录入任何学生!\n");
else
{
printf("学号\t姓名\t性别\t年龄\t联系方式\n");
for (i = 0; i < count; i++)
printf("%s\t%s\t%s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age, stu[i].phone);
}
system("pause");
system("cls");
break;
case 6:
printf("已录入%d名同学\n", count);
system("pause");
system("cls");
break;
case 0:
system("cls");
printf("欢迎再次使用学生信息管理系统......\n");
printf("请按任意键继续......");
t = 0;
writeFile(stu, count);
break;
default:
printf("选择错误,请重新输入\n");
system("pause");
system("cls");
}
getchar();
}getchar();
return 0;
}
函数部分的源文件 func.c
#include"head.h"
void menu(void)
{
printf("***************************************\n");
printf("********* 学生信息管理系统 *********\n");
printf("***************************************\n");
printf("********* 1. 添加学生信息 *********\n");
printf("********* 2. 修改学生信息 *********\n");
printf("********* 3. 删除学生信息 *********\n");
printf("********* 4. 查找学生信息 *********\n");
printf("********* 5. 显示全部信息 *********\n");
printf("********* 6. 查询录入人数 *********\n");
printf("********* 0. 保存退出系统 *********\n");
printf("***************************************\n");
printf("请进行选择==> ");
}
//增加信息
int add(Student stu[], int count, Student ss)
{
int pos;
pos = searchID(stu, count, ss);
if (pos == -1)
{
stu[count] = ss;
return count + 1;
}
else
return -1;
}
//修改信息
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
int modify(Student stu[], int count, Student ss, int n)
{
int pos;
pos = searchID(stu, count, ss);
if (pos == -1)
return -1;
else
{
if (n == 1)
strcpy(stu[pos].name, ss.name);
else if (n == 2)
strcpy(stu[pos].sex, ss.sex);
else if (n == 3)
stu[pos].age = ss.age;
else if (n == 4)
strcpy(stu[pos].phone, ss.phone);
}
return count;
}
//删除信息
//若输入的学号存在,正常删除,返回学生数,否则,删除失败,返回 -1
int Delete(Student stu[], int count, Student ss)
{
int pos, i;
pos = searchID(stu, count, ss);
if (pos == -1)
return -1;
else
{
for (i = pos + 1; i < count; i++)
stu[i - 1] = stu[i];
return count - 1;
}
}
//查找信息
//在stu的count个元素,查找ss
//查找成功,返回ss在stu中的位置号;否则,返回 -1
int searchID(Student stu[], int count, Student ss)
{
int i;
for (i = 0; i < count; i++)
if (strcmp(stu[i].id, ss.id) == 0)
return i;
return -1;
}
int searchNAME(Student stu[], int count, Student ss)
{
int i;
for (i = 0; i < count; i++)
if (strcmp(stu[i].name, ss.name) == 0)
return i;
return -1;
}
//写入文件信息
void writeFile(Student stu[], int count)
{
FILE* fp;
int i;
fp = fopen("student.txt", "w");
for (i = 0; i < count; i++)
fprintf(fp, "%s\t%s\t%s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age, stu[i].phone);
fclose(fp);
}
//读取文件信息
int readFile(Student stu[])
{
FILE* fp;
int i;
fp = fopen("student.txt", "r");
if (fp == NULL)
return 0;
for (i = 0; !feof(fp); i++)
fscanf(fp, "%s%s%s%d%s\n", stu[i].id, stu[i].name, stu[i].sex, &stu[i].age, stu[i].phone);
fclose(fp);
return i;
}