学生信息管理系统(文件)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++这种编译器中就要去掉了,否则程序报错。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

很强强

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

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

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

打赏作者

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

抵扣说明:

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

余额充值