当前位置:网站首页>C语言 学生信息管理系统 基于数组 可以存取到文本文件
C语言 学生信息管理系统 基于数组 可以存取到文本文件
2022-07-26 22:50:00 【清风清晨】
**
C语言
**
第一章 学生信息管理系统 多文件开发 基于数组 支持存取到文本文件
前言
这是C语言第一篇,记录学生信息管理系统从0开始到功能实现
一、学生信息管理系统是什么?
是记录学生的:学号、姓名、年龄、性别、第一科成绩、第二科成绩、第三科成绩…的系统。
二、开发步骤
1.Visual Studio 2019解决方案截图


2.按照上图准备一下文件
del.c:
#include “Student.h”
///
/// 删除学生信息
///
void del()
{
int i, j, flag = 0;
char s1[LEN + 1];
printf(“请输入要删除学生的学号:\n”);
scanf(“%s”, s1);
for (i = 0; i < n; i++)
{
if (strcmp(students[i].id, s1) == 0)
{
flag = 1;
//要删除学生后面的学生往前移1位
for (j = i; j < n; j++)
{
students[j] = students[j + 1];
}
}
}
//查找失败
if (flag == 0)
{
printf(“该学号不存在!!!\n”);
}
if (flag == 1)
{
printf(“删除成功!!!\n”);
//删除成功,学生人数减1
n–;
}
system(“pause”);
}
display.c
#include “Student.h”
///
/// 显示全部信息
///
void display()
{
int i;
printf(“共有%d位学生的信息:\n”, n);
if (n != 0)
{
printf(“学号\t姓名\t年龄\t性别\tC语言成绩\t数学\t英语\n”);
printf(“---------------------------------------------\n”);
for (i = 0; i < n; i++)
{
printf(“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”, students[i].id, students[i].name,
students[i].age, students[i].gender, students[i].score[0], students[i].score[1],
students[i].score[2]);
}
}
system(“pause”);
}
flush.c
#include “Student.h”
///
/// 刷新文件
///
///
int flush()
{
char filename[LEN + 1];
int i = 0;
printf(“请输入要刷新学生信息的文件名:\n”);
scanf(“%s”, filename);
int j = 0;
FILE* fp;
fp = fopen(filename, “r”);
if (fp == NULL) return 0;
//从文件读取信息
while (fscanf(fp, “%s %s %d %c %d %d %d”, &students[j].id, &students[j].name, &students[j].age,
&students[j].gender, &students[j].score[0], &students[j].score[1], &students[j].score[2]) == 7)
{
printf(“学号\t姓名\t年龄\t性别\tC语言\t数学\t英语\n”);
printf(“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”, students[j].id, students[j].name, students[j].age,
students[j].gender, students[j].score[0], students[j].score[1], students[j].score[2]);
j++;
}
n = j;
printf(“刷新成功!!!”);
return n;
}
insert.c
#include “Student.h”
///
/// 新增学生
///
void insert()
{
int i = n, j, flag;
printf(“请输入待增加的学生数:\n”);
scanf(“%d”, &m);
if (m > 0)
{
do
{
flag = 1;
while (flag)
{
flag = 0;
printf(“请输入第%d位学生的学号:\n”, i + 1);
rewind(stdin);
scanf(“%s”, students[i].id);
for (j = 0; j < i; j++)
{
if (strcmp(students[j].id, students[i].id) == 0)
{
printf(“该学号已存在,请重新输入!\n”);
flag = 1;
break;
}
}
}
printf(“请输入第%d位学生的姓名:\n”, i + 1);
rewind(stdin);
scanf(“%s”, students[i].name);
printf(“请输入第%d位学生的年龄:\n”, i + 1);
scanf(“%d”, &students[i].age);
printf(“请输入第%d位学生的性别:\n”, i + 1);
rewind(stdin);
scanf(“%c”, &students[i].gender);
printf(“请输入第%d位学生的C语言成绩:\n”, i + 1);
scanf(“%d”, &students[i].score[0]);
printf(“请输入第%d位学生的数学成绩:\n”, i + 1);
scanf(“%d”, &students[i].score[1]);
printf(“请输入第%d位学生的英语成绩:\n”, i + 1);
scanf(“%d”, &students[i].score[2]);
if (flag == 0)
{
i++;
}
} while (i < n + m);
}
n += m;
printf(“学生信息增加完毕!!!\n”);
system(“pause”);
}
main.c
#include “Student.h”
int main()
{
while (k)
{
menu();
}
system(“pause”);
return 0;
}
menu.c
#include “Student.h”
///
/// 界面
///
void menu()
{
int num;
printf(“\n\n \n\n”);
printf(“\n\n");
printf(" 学生信息管理系统 \n\n");
printf("\n\n”);
printf(“系统功能菜单*************\n”);
printf(" ---------------------- --------------------------\n");
printf(" ******************************************************\n");
printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * \n");
printf(" ******************************************************\n");
printf(" * 2.查询学生信息 * * 3.修改学生信息 * \n");
printf(" ******************************************************\n");
printf(" * 4.增加学生信息 * * 5.按学号删除学生信息 * \n");
printf(" ******************************************************\n");
printf(" * 6.显示当前信息 * * 7.保存当前学生信息 * \n");
printf(" ******************************************************\n");
printf(" * 8.退出系统 * * * \n");
printf(" ******************************************************\n");
printf(" ---------------------- --------------------------\n");
printf(“请选择菜单编号:”);
scanf(“%d”, &num);
switch (num)
{
case 0:help(); break;
case 1:flush(); break;
case 2:seek(); break;
case 3:modify(); break;
case 4:insert(); break;
case 5:del(); break;
case 6:display(); break;
case 7:save(); break;
case 8:
k = 0;
printf(“即将退出程序!\n”);
break;
default:printf(“请在0-8之间选择\n”);
}
}
modify.c
#include “Student.h”
///
/// 修改学生信息
///
void modify()
{
int i, item, num = -1;
char sex1, s1[LEN + 1], s2[LEN + 1];//以姓名和学号最大长度+1为准
int score1;
printf(“请输入要修改的学生的学号:\n”);
scanf(“%s”, s1);
for (i = 0; i < n; i++)
{
if (strcmp(s1, students[i].id) == 0) //比较字符串是否相等
{
num = i;
printf(“------------------\n”);
printf(“1.修改姓名\n”);
printf(“2.修改年龄\n”);
printf(“3.修改性别\n”);
printf(“4.修改C语言成绩\n”);
printf(“5.修改高等数学成绩\n”);
printf(“6.修改大学英语成绩\n”);
printf(“7.退出本菜单\n”);
printf(“------------------\n”);
while (1)
{
printf(“请选择子菜单编号:\n”);
scanf(“%d”, &item);
switch (item)
{
case 1:
printf(“请输入新的姓名:\n”);
scanf(“%s”, s2);
strcpy(students[num].name, s2);
break;
case 2:
printf(“请输入新的年龄:\n”);
scanf(“%d”, &students[num].age);
break;
case 3:
printf(“请输入新的性别:\n”);
scanf(“%c”, &sex1);
students[num].gender = sex1;
break;
case 4:
printf(“请输入新的C语言成绩:\n”);
scanf(“%d”, &score1);
students[num].score[0] = score1;
break;
case 5:
printf(“请输入新的数学成绩:\n”);
scanf(“%d”, &score1);
students[num].score[1] = score1;
break;
case 6:
printf(“请输入新的英语成绩:\n”);
scanf(“%d”, &score1);
students[num].score[2] = score1;
break;
case 7: return;
default: printf(“请在1-7之间选择\n”);
}
}
printf(“修改完毕!请及时保存!\n”);
}
else
{
printf(“没有该学生学号!\n”);
}
}
}
save.c
#include “Student.h”
///
/// 保存学生信息
///
void save()
{
int i;
FILE* fp;
char filename[LEN + 1];
printf(“请输入要保存的文件名:\n”);
rewind(stdin);
scanf(“%s”, filename);
fp = fopen(filename,“w”);
for (i = 0; i < n; i++)
{
fprintf(fp,“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”,students[i].id,students[i].name,students[i].age,
students[i].gender,students[i].score[0],students[i].score[1],students[i].score[2]);
}
printf(“保存成功!!!\n”);
fclose(fp);
system(“pause”);
}
seek.c
#include “Student.h”
///
/// 查找学生信息
///
void seek()
{
int i, item, flag;
char s1[LEN + 1];
printf(“-------------------------\n”);
printf(“-----1.查询所有学生信息–\n”);
printf(“-----2.按学号查询--------\n”);
printf(“-----3.按姓名查询--------\n”);
printf(“-----4.退出本菜单--------\n”);
printf(“-------------------------\n”);
while (1)
{
printf(“请选择子菜单编号:”);
scanf(“%d”, &item);
flag = 0;
switch (item)
{
case 1:
printf(“学号\t姓名\t年龄\t性别\tC语言成绩\t数学\t英语\n”);
printf(“---------------------------------------------\n”);
for (i = 0; i < n; i++)
{
printf(“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”, students[i].id, students[i].name,
students[i].age, students[i].gender, students[i].score[0], students[i].score[1],
students[i].score[2]);
}
break;
case 2:
printf(“请输入要查询的学生的学号:\n”);
scanf(“%s”, s1);
for (i = 0; i < n; i++)
{
if (strcmp(s1, students[i].id) == 0)
{
flag = 1;
printf(“学号\t姓名\t年龄\t性别\tC语言成绩\t数学\t英语\n”);
printf(“---------------------------------------------\n”);
printf(“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”, students[i].id, students[i].name,
students[i].age, students[i].gender, students[i].score[0], students[i].score[1],
students[i].score[2]);
}
}
if (flag == 0) printf(“该学号不存在!\n”); break;
case 3:
printf(“请输入要查询学生的姓名:\n”);
scanf(“%s”, s1);
for (i = 0; i < n; i++)
{
if (strcmp(students[i].name, s1) == 0)
{
flag = 1;
printf(“学号\t姓名\t年龄\t性别\tC语言成绩\t数学\t英语\n”);
printf(“---------------------------------------------\n”);
printf(“%s\t%s\t%d\t%c\t%d\t%d\t%d\n”, students[i].id, students[i].name,
students[i].age, students[i].gender, students[i].score[0], students[i].score[1],
students[i].score[2]);
}
}
if (flag == 0) printf(“该姓名不存在!\n”); break;
case 4: return;
default: printf(“请在1-4之间选择\n”);
}
}
}
sort.c
#include “Student.h”
///
/// 按学号排序
///
void sort()
{
int i, j, k, * p, * q, s;
char temp[LEN + 1], ctemp;
int ftemp;
for (i = 0; i < n - 1; i++)
{
for (j = n - 1; j > i; j–)
{
if (strcmp(students[j - 1].id, students[j].id) > 0)
{
strcpy(temp, students[j - 1].id);
strcpy(students[j - 1].id, students[j].id);
strcpy(students[j].id,temp);
strcpy(temp, students[j - 1].name);
strcpy(students[j - 1].name, students[j].name);
strcpy(students[j].name, temp);
ctemp = students[j - 1].gender;
students[j - 1].gender = students[j].gender;
students[j].gender = ctemp;
p = &students[j - 1].age;
q = &students[j].age;
s = *p;
*p = *q;
*q = s;
for (k = 0; k < 3; k++)
{
ftemp = students[j - 1].score[k];
students[j - 1].score[k] = students[j].score[k];
students[j].score[k] = ftemp;
}
}
}
}
}
Student.c
#include “Student.h”
extern int k = 1;
extern int m = 0;
extern int n = 0;
///
/// 系统帮助与函数说明
///
void help()
{
printf(“\n0.欢迎使用系统帮助!\n”);
printf(“\n1.初次进入系统后,请先选择增加学生信息;\n”);
printf(“\n2.按照菜单提示键入数字代号;\n”);
printf(“\n3.增加学生信息后,切记保存;\n”);
printf(“\n4.谢谢您的使用!\n”);
}
Student.h
#ifndef Student_h
#define Student_h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 15 //学号和姓名的最大字符数,实际请更改
#define N 50 //最大学生人数,实际请更改
extern int k;
extern int m;
extern int n; //n代表当前记录的学生人数
//函数声明
void help();//系统帮助函数
void readfile();
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
int flush();//刷新文件
void sort();//按学号排序
//结构体保存学生信息
struct Student
{
char id[LEN+1];
char name[LEN+1];
int age;
char gender;
int score[3];
} students[N];
#endif
总结
按照上面的内容,把这13个文件分别创建在Visual Studio 2019 社区版,解决方案的里面,然后按照上面的内容,分别复制粘贴13个文件的代码,之后编译运行,就可以了,程序运行时可以将添加好的学生信息存储到程序可执行文件的相同目录下,文件名可以自拟,例如students.txt,之后可以打开这个文本文件看看,是用制表符分割的每个学生的信息。程序退出后,可以选择1.刷新学生信息,从这个文件里读取回来所有的学生信息,之后可以继续添加,或者删除修改学生信息。
边栏推荐
- HCIP第一天
- Hcip bidirectional republication and routing strategy
- 求解整数的每一位
- NAT (network address translation protocol)
- golang 实现 tcp-聊天室
- HCIA (network elementary comprehensive experimental exercise)
- About unsafe problems such as fopen and strError encountered in vs2022 or advanced version running environment
- Codeforces Round #807 (Div. 2), problem: (C) Mark and His Unfinished Essay
- C language - first program, print, variables and constants
- 入住博客第一天【冲八万】!
猜你喜欢

C语言——数组、字符串处理函数、strlen、strcpy和strncpy、strcat和strncat、strcmp和strncmp

OSPF basic experimental configuration

Interesting C language

Codeforces Round #796 (Div. 2), problem: (1688C) Manipulating History

最新京东短信登录+傻妞机器人保姆级部署教程(2022/7/24)

记录第N次SQL异常

C language - first program, print, variables and constants

HCIP oSPF综合实验

C language -- nesting of relational and logical operators, if statements, switch statements, and branch structures

Hcip day 1
随机推荐
js中的数组方法和循环
HCIP-第五天-OSPF扩展配置实验
NAT网络地址转换协议-拓扑实验
The pointer is really profound!!!
OSPF basic configuration application (comprehensive experiment: interference election default routing area summary authentication -- interface authentication)
ESP8266Wi-Fi接入云平台
全连MGRE与星型拓扑MGRE
Explain exi interrupt through the counting experiment of infrared sensor
C语言——二维数组、指针
数字集成电路:CMOS反相器(一)静态特性
识时务者常用网址大全
SQL优化的N种方法
Educational Codeforces Round 132 (Rated for Div. 2), problem: (D) Rorororobot
Use of golang - sync package (waitgroup, once, mutex, rwmutex, cond, pool, map)
Self introduction and planning about programming
三个整数从大到小排序(详细介绍多种方法)
Interesting C language
HCIP第一天
CAN总线通信应用
【你了解Cache吗——全面理解高速缓冲存储器】