IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 学生信息管理系统(文件)C语言实现 -> 正文阅读

[C++知识库]学生信息管理系统(文件)C语言实现

话不多说,直接上源码,源码有注释
?? ???? inquire()//查询
?? ???? show()//显示
?? ???? increase();//增加
?? ???? del()//删除
?? ???? modification()//修改
?? ???? save()//保存

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define DATALEN 15//定义结构体数量

int n=0;//当前学生人数
int m=0;//新增学生人数
void help();
int inquire();
void modification();
void save();
void show();
void increase();
void del();

struct stduent {//储存学生信息
    int age;//年龄
    char name[30];//姓名    
    char Id[30];//学号
    char chinese[10];//语文成绩    
    char math[10];//数学
};
struct stduent words[DATALEN];

int main() {
	int j;
    FILE* data;//要读取的文件指针
    int sum = 0, k = 1; 
    int i = 0;//结构题数组移动
    if ((data = fopen("D://qq.txt", "r")) == NULL) {//打开文件
        printf("打开文件失败\n");
        return ;
    }
	else {
		printf("---读取的学生信息\n");
		printf("年龄  姓名 学号  语文  数学  \n");
		while (!feof(data)) {
			fscanf(data, "%d %3s %3s %3s %3s\n", &words[i].age, &words[i].name, &words[i].Id, &words[i].chinese, &words[i].math);
			//循环读出文件信息并保存进结构体
			i++;//每储存一位学生信息就加一
		}
		//fclose(data);
		for (j = 0; j < i; j++) {
			printf("%d %5s %5s %5s %5s\n", words[j].age, words[j].name, words[j].Id, words[j].chinese, words[j].math);//循环显示学生信息
		}
		fclose(data);
		n = j;//读取当前学生信息
	}
	while (k)
	{
		int num;
		printf("\n----------------------------------------\n");
		printf("		学生信息管理系统\n");
		printf("\n");
		printf("     * 0.           系统帮助\n");
		printf("\n");
		printf("     * 1.         查询学生信息\n");
		printf("\n");
		printf("     * 2.        显示所有学生信息\n");
		printf("\n");
		printf("     * 3.         增加学生信息\n");
		printf("\n");
		printf("     * 4.         删除学生信息\n");
		printf("\n");
		printf("     * 5.         修改学生信息\n");
		printf("\n");
		printf("     * 6.         保存当前信息\n");
		printf("\n");
		printf("     * 7.          退出系统\n");
		printf("\n");
		printf("--------------------------------------------\n");

		printf("请选择菜单编号:");
		scanf("%d", &num);

		switch (num)
		{
		case 0:help(); break;//帮助
		case 1:inquire(); break;//查询
		case 2:show(); break;//显示
		case 3:increase(); break;//增加
		case 4:del(); break;//删除
		case 5:modification(); break;//修改
		case 6:save(); break;
		case 7: {
			k = 0;//用于退出while循环
			printf("即将退出程序!\n");
			break;
		}
		default:printf("请在0-8之间选择\n");
		}
	}
	return 0;
}

//操作需知
void help(){
        printf("\n----------------------------------------------------------\n");
        printf("\n--操作须知:\n");
        printf("         欢迎使用学生信息管理系统,请认真阅读操作须知\n");
        printf("                   注意,输入分大小写\n");
        printf("                 初次进去请增加学生信息\n");
        printf("        请按要求输入要查询的信息代号,不然将会出现错误\n");
        printf("                 完成操作后请保存信息\n");
        printf("                     感谢您的使用\n");
        printf("--------------------------------------------------------------\n");
        system("pause");//用于退出当前函数
    }

//查询学生信息
int inquire() {

	int flag = 0;//用于判断
	char pp[15];//学号
	int i = 0;
	int  num = 0;
	
		while (1)
		{
			printf("\n--请输入菜单编号\n");
			printf("       1.    按学号查询\n");
			printf("       2.       退出\n");

			scanf("%d", &num);
			switch (num)
			{
			case 1:
				printf("请输入要查询的学生的学号:\n");
				scanf("%s", pp);//用于比较
				for (int i = 0; i < n; i++) {

					if (strcmp(words[i].Id, pp) == 0)//进行比较
					{
						printf("\n年龄 姓名 学号 数学 语文  \n");
						printf("%d   %s   %s  %s  %s", words[i].age, words[i].name, words[i].Id, words[i].math, words[i].chinese);
							printf("\n");
							flag = 1;
					}
				}
                
				if (flag == 0) 
					printf("不存在");
				break;
			case 2:
				system("cls");//清屏函数
				return;
			default:
				printf("请在1-3之间选择\n");
			}
		}
			
}

 //修改学生信息
void modification() {

	 int i, item, num = -1,flag=0;
	 char s1[30], s2[30],score1[5], score[5];

	 printf("请输入要要修改的学生的姓名:\n");
	 scanf("%s", s1);
	 for (i = 0; i < n; i++) {
		 if (strcmp(words[i].name, s1) == 0) {
			 flag = 1;
			 num = i;
		 }
	 }
	 if (flag == 0) {
		 printf("\n不存在\n");
		 system("pause");
	 }

	 if (num != -1)
	 {
		 while (1) {
			 printf("\n请确认需要修改的信息,并输入编号:\n");
			 printf("\n");
			 printf(" *1.   姓名\n");
			 printf(" *2.   年龄\n");
			 printf(" *3.   语文\n");
			 printf(" *4.   数学\n");
			 printf(" *5.   退出\n");
			 printf("\n");

			 printf("请选择子菜单编号:");
			 scanf("%d", &item);
			 switch (item)
			 {
			 case 1:
				 printf("请输入新的姓名:\n");
				 scanf("%s", s2);
				 strcpy(words[num].name, s2);
				 printf("修改完毕\n");
				 break;

			 case 2:
				 printf("请输入新的年龄:\n");
				 scanf("%d", words[num].age);
				 printf("修改完毕\n");
				 break;

			 case 3:
				 printf("请输入新的语文成绩:\n");
				 scanf("%s", &score);
				 strcpy(words[num].chinese, score);
				 printf("修改完毕\n");
				 break;

			 case 4:
				 printf("请输入新的数学成绩:\n");
				 scanf("%s", &score);
				 strcpy(words[num].math, score);
				 printf("修改完毕\n");
				 break;

			 case 5:
				 system("cls");//清屏
				 return;
			 default:printf("请在1-7之间选择\n");
			 }
		 }
	 }
	 if(flag==1)
		 printf("修改完毕!请及时保存!\n");
	 else if (flag == 0)
		 printf("未能修改\n");
 }

//保存信息
void save()
{

	FILE* fp;		//文件指针
	int i;

	fp = fopen("D://qq.txt", "wb + ");//打开文件

	for (i = 0; i < 2; i++)
	{
		fprintf(fp,"%d %s %s %s %s\r\n", words[i].age, words[i].name, words[i].Id, words[i].math, words[i].chinese);
	}

	fclose(fp);//关闭文件
	printf("已完成保存!");
	system("pause");//结束进程但不退出
	system("cls");
}

//显示
void show() {
	int i;
	printf("共有%d位学生的信息:\n", n);
	if (n!=0)
	{
		printf("年龄  姓名 学号  语文  数学  \n");
		printf("--------------------------------------------------------------------\n");
		for (i = 0; i < n; i++)
		{
			printf("%d %5s %5s %5s %5s\n", words[i].age, words[i].name, words[i].Id, words[i].chinese, words[i].math);
		}
		return;
	}
}

//增加
void increase() {
	int i = n, j, flag;				//n为现有学生人数 

	printf("请输入待增加的学生数:\n");
	scanf("%d", &m);

	if (m > 0)
	{
		do
		{
			flag = 1;
			while (flag)
			{
				flag = 0;
				printf("请输入第%d位学生的学号:\n", i + 1);
				scanf("%s", &words[i].Id);
				for (j = 0; j < i; j++)
					if (strcmp(words[i].Id, words[j].Id) == 0) {//先进行比较是否存在
						printf("已有该学号!\n");
						flag = 1;
						break;
					}
			}
			printf("请输入第%d 个新学生的学号:\n", i + 1);
			scanf("%s", words[i].Id);
			printf("请输入第%d 个新学生的姓名:\n", i + 1);
			scanf("%s", words[i].name);
			printf("请输入第%d 个新学生的年龄:\n", i + 1);
			scanf("%d", &words[i].age);
			printf("请输入第%d 个新学生的语文成绩\n", i + 1);
			scanf("%s", words[i].chinese);
			printf("请输入第%d 个新学生的数学成绩:\n", i + 1);
			scanf("%s", words[i].math);
			if (flag == 0)
			{
				i++;
			}
		} while (i < n + m);//用于判断是否结束循环

		n += m;//原来的加上新增的
		printf("信息增加完毕!\n\n");
		system("pause");
		system("cls");
	}
}

//删除
void del() {
	int i, j, flag = 0;							//flag为查找成功标志,0表示查找失败,1表示查找成功
	char s1[30];
	printf("请输入要删除学生的学号:\n");
	scanf("%s", s1);
	for (i = 0; i < n; i++) 
		if (strcmp(words[i].Id, s1) == 0){//比较是否存在
			flag = 1;
			for (j = i; j < n - 1; j++)		//后面的学生向前移动
				words[j] = words[j + 1];
		}
	}
	if (flag == 0)
		printf("该学号不存在!\n");
	else if (flag == 1) 
	{
		printf("删除成功\n");
		n--;	//删除成功后,学生人数减1
	}

	system("pause");
	system("cls");
}

#define _CRT_SECURE_NO_WARNINGS 要注意此宏定义的使用,如果是在像vs这用编译器中使用就要加上,不然像scanf_s这种不安全的函数就不能使用,在vc++这种编译器中就要去掉了,否则程序报错。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 09:58:18  更:2021-09-26 10:00:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:51:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码