C语言程序设计—学籍信息管理系统

学籍信息管理系统

.

系统功能:录入、修改、添加、删除、查找、读取、删除数据
系统主要技术:基本就是函数的调用,只用到结构体,与文件的读写
.

所有的数据改动都会及时保存到文件

student.txt文件用来储存所有信息
在这里插入图片描述
shuju.txt文件用来储存信息数据
在这里插入图片描述

代码如下

/*
			学籍信息管理系统
系统功能:录入、修改、添加、删除、查找、读取、删除数据
系统主要技术:基本就是函数的调用,还有结构体,与文件的读写 

*/

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


int n = 0;//变动的学生个数 
int i=0;//用来储存总共的学生人数

struct student
{
    char xh[20];//学生学号
    char xm[10];//学生姓名
    int nl;//年龄
    char xb1[4];//学生性别
    char jg[100];//籍贯
    char tele[20];//学生电话
    char xb[40];//系别
    char zy[36];//学生专业
    char bj[30];//学生班级
} aa[100]; //定义一个学生基本学籍信息的结构体,可容纳100人;


//申明各函数!
void init();//初始化界面 
void help();//系统帮助
void chazhao();//查找
void xiugai();//修改函数
void caidan();//主菜单
void shuru();//输入函数
void tianjia();//添加函数
void shanchu();//删除函数
void shuchu();//输出函数
void baocun();//保存函数
void duqu();//读取函数
void del();//清空文件数据 
void luru();//全部信息录入文件 

/*
主函数 
*/
int main()
{
	init(); 
	system("pause");
	system("cls");
	
	duqu();
	
    caidan();
    return 0;
}

/*
系统初始化界面
*/ 
void init()
{
	printf("————————————————————————————————————————————————————————————\n\n");
    printf("\t\t\t\t*********************************************************\n\n");
    printf("\t\t\t\t*****************欢迎使用学生学籍管理系统****************\n\n");
    printf("\t\t\t\t——————————学院:胡编乱造学院——————————\n\n");
    printf("\t\t\t\t——————————班级:胡编1班————————————\n\n");
    printf("\t\t\t\t——————————姓名:xiaozhu06———————————\n\n");
    printf("\t\t\t\t*********************************************************\n\n");
}

/*
帮助函数
显示完成后再显示菜单
*/
void help()
{
    printf("\n0.欢迎使用系统帮助!\n");
    printf("\n1.初次进入系统后,请先选择录入学生学籍;\n");
    printf("\n2.按照菜单提示键入数字代号;\n");
    printf("\n3.录入或删除学生学籍信息后,切记保存;\n");
    printf("\n4.谢谢您的使用!\n");
    caidan();
}

/*
主菜单函数
用户输入0-8的数字并显示其功能
*/
void caidan()
{
    printf("—————————————————————————————————————————————————————————\n");
    printf("*********************************************************\n");
    printf("*****************欢迎使用学生学籍管理系统****************\n");
    printf("***输入“0”小白帮助                                    ***\n");
    printf("***输入“1”可录入学籍信息                              ***\n");
    printf("***输入“2”可修改学籍信息                              ***\n");
    printf("***输入“3”可添加学籍信息                              ***\n");
    printf("***输入“4”可以删除学籍的信息                          ***\n");
    printf("***输入“5”可以查找学生学籍的信息                      ***\n");
    printf("***输入“6”可以输出学籍表                              ***\n");
    printf("***输入“7”清空文件中储存的学生信息                    ***\n");
    printf("***输入“8”结束系统                                    ***\n");
    printf("*********************************************************\n\n");
    printf("请输入编号:(1 —8)");
    int x;
    scanf("%d",&x);
    switch(x)
    {
    case 0:
        system("cls");
        help();
        break;
    case 1:
        system("cls");
        shuru();
        break;
    case 2 :
        system("cls");
        xiugai();
        break;
    case 3:
        system("cls");
        tianjia();
        break;
    case 4:
        system("cls");
        shanchu();
        break;
    case 5:
        system("cls");
        chazhao();
        break;
    case 6:
        system("cls");
        shuchu();
        caidan();
        break;
    case 7:
        system("cls");
        del();
        caidan();
        break;
    case 8:
        system("cls");
        break;
    }
}

/*
录入学籍信息函数 
*/
void shuru()
{
	int l,m,p;
    printf("请输入要录入的学生人数:\n");
    scanf("%d",&n);
    p = n;
    for(m = i+1; m <= (i+n); m ++)//循环输入学生信息
    {
	bb: int flage = 0;
        printf("请输入学号:");
        scanf("%s",aa[m].xh);
        for(l = 1; l < m; l ++)
        {
        	if(strcmp(aa[m].xh,aa[l].xh) == 0)
        	{
        		flage = 1;
        		break;
			}
		}
        if(flage == 1)
        {
        	printf("学号重复,请重新输入:\n");
        	goto bb;
		}
		p --;
        printf("请输入姓名:");
        scanf("%s",aa[m].xm);
        printf("请输入年龄:");
        scanf("%d",&aa[m].nl);
        printf("请输入性别:");
        scanf("%s",aa[m].xb1);
        printf("请输入籍贯:");
        scanf("%s",aa[m].jg);
        printf("请输入电话:");
        scanf("%s",aa[m].tele);
        printf("请输入系别:");
        scanf("%s",aa[m].xb);
        printf("请输入专业:");
        scanf("%s",aa[m].zy);
        printf("请输入班级:");
        scanf("%s",aa[m].bj);
        printf("\n");
        printf("已录入 %d 个学生信息\n",n-p);
        printf("\n");
        if(p == 0)
        printf("本次录入完成\n");
    }
    
    i = i + n;
    baocun();
    caidan();
}

/*
修改函数
通过学号查找来修改学生信息
*/
void xiugai()
{
    int j;
    char k[100];
    printf("请输入需要修改的学生学籍的学号:");
    scanf("%s",k);
    for(j=1; j<=i; j++)
    {
        if(strcmp(aa[j].xh,k) == 0)
        {
        	strcpy(aa[j].xh,k);
        	break;
		}
    }
    printf("请输入姓名:");
    scanf("%s",aa[j].xm);
    printf("请输入年龄:");
    scanf("%d",&aa[j].nl);
    printf("请输入性别:");
    scanf("%s",aa[j].xb1);
    printf("请输入籍贯:");
    scanf("%s",aa[j].jg);
    printf("请输入电话:");
    scanf("%s",aa[j].tele);
    printf("请输入系别:");
    scanf("%s",aa[j].xb);
    printf("请输入专业:");
    scanf("%s",aa[j].zy);
    printf("请输入班级:");
    scanf("%s",aa[j].bj);
    luru();
    caidan();
}

/*
查找函数
通过学号来查找学生信息
*/
void chazhao()
{
    int j,flage,z;
    char p[100];
    flage = 0;
    printf("\n请输入你所要查找学生的学号:");
    scanf("%s",p);
    for(j=1; j<=i; j++)
    {
        if(strcmp(aa[j].xh,p) == 0)
        {
        	flage = 1;
        	break;
		}
    }
    if(flage == 1)
    {
    	printf("\n已查到此人,信息为:\n\n");
	    printf("学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
	}
	if(flage == 0)
		printf("\n查无此人\n");
	printf("\n是否继续查找(是输入1、否输入0):");
	scanf("%d",&z);
	switch(z)
	{
		case 1:
			chazhao();
			break;
		case 0:
			system("cls");
			break;
		default:
			system("cls");
			break;
	}
    caidan();
}

/*
添加信息函数
*/
void tianjia()
{
    FILE*fp;
    int counts=0;//表示添加学生的数量
    int k;
    printf("\n 原来的学生信息:\n");
	shuchu();
    printf("请输入想增加的学生数:\n");
    scanf("%d",&n);
    for (k=i+1; k<=(i+n); k++)
    {
   	aa:	int flage;
   		flage = 0;
        printf("\n 请输入新增加学生的信息:\n");
        printf("请输入学号:  ");
        scanf("%s",aa[k].xh);
        int q;
        for(q = 1; q < k; q ++)
        {
        	if(strcmp(aa[k].xh,aa[q].xh) == 0)
        	{
        		flage = 1;
        		break;
			}
		}
       if(flage == 1)
       {
       	printf("学号重复,请重新输入\n");
       		goto aa; 
	   }
	   
        getchar();
        printf("请输入姓名:  ");
        scanf("%s",aa[k].xm);
        getchar();
        printf("请输入性别:  ");
        scanf("%c",aa[k].xb1);
        getchar();
        printf("请输入年龄:  ");
        scanf("%d",&aa[k].nl);
        getchar();
        printf("请输入籍贯:  ");
        scanf("%s",aa[k].jg);
        getchar();
        printf("请输入电话:  ");
        scanf("%s",aa[k].tele);
        printf("请输入系别:  ");
        scanf("%s",aa[k].xb);
        getchar();
        printf("请输入专业:  ");
        scanf("%s",aa[k].zy);
        getchar();
        printf("请输入班级:  ");
        scanf("%s",aa[k].bj);
        printf("\n");
        counts=counts+1;
        printf("已增加的人数:\n");
        printf("%d\n",counts);
    }
    printf("\n添加完毕!\n");
    i=i+n;
    printf("\n浏览增加后的所有学生信息:\n");
    printf("\n");
    baocun();
    shuchu();
   
    caidan();
}

/*
删除函数
*/
void shanchu()   
{
    int k,j,t,flage,numb;
    char xh[100];
    printf("请输入要删除的学生学籍的学号:\n");
    scanf("%s",xh);
    flage=0;
    for(k=1; k<=i; k++)
    {
        if(strcmp(aa[k].xh,xh) == 0)
        {
        	flage = 1;
        	break;
        }
    }
    if(flage == 1)
    {
        printf("\n已找到此人,原始记录为:\n");
        printf("学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[k].xh,aa[k].xm,aa[k].nl,aa[k].xb1,aa[k].jg,aa[k].tele,aa[k].xb,aa[k].zy,aa[k].bj);
        printf("\n确实要删除此人信息请按1,不删除请按0\n");
        scanf("%d",&numb);
        if(numb==1)
        {
            for(j=k; j<=i-1; j++)
            {
                strcpy(aa[j].xh,aa[j+1].xh);
                strcpy(aa[j].xm,aa[j+1].xm);
                aa[j].nl=aa[j+1].nl;
                strcpy(aa[j].xb1,aa[j+1].xb1);
                strcpy(aa[j].jg,aa[j+1].jg);
                strcpy(aa[j].tele,aa[j+1].tele);
                strcpy(aa[j].xb,aa[j+1].xb);
                strcpy(aa[j].zy,aa[j+1].zy);
                strcpy(aa[j].bj,aa[j+1].bj);
            }
            i --;
        }
        else;
	}
	if(numb == 1)
    	luru();
    if(flage == 0)
    {
        printf("\n对不起,查无此人!\n\n");
    }
    printf("继续删除请按1,不再删除请按0\n");
    scanf("%d",&t);
    switch(t)
    {
    case 1:
        shanchu();
        break;
    case 0:
    	system("cls");
        caidan();
        break;
    default :
    	system("cls");
        break;
    }
    
}

/*
全部学生信息输出 
*/
void shuchu()
{
    FILE*fp;
//	fp=fopen("student.txt","r");
	if((fp = fopen("student.txt","r")) == NULL)
    {
        printf("打开文件失败\n");
        exit(EXIT_FAILURE);
    }
	/*-
	while循环 
	读取文件中的数据 
	*/
	char a[100];
	while(fgets(a,100,fp))
	{
		
		printf("%s",a);
	}
	fclose(fp);
	getchar();
}

/*
保存函数
学生信息每次添加后以 追加 的方式保存到文件中 
*/
void baocun()   
{
	
    FILE*fp;
    fp=fopen("student.txt","ab+");
    int j;
    for(j=i-n+1; j<=i; j++)
    {
        fprintf(fp,"学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    printf("\n");
    fclose(fp);
    
    FILE *fp1;
    if((fp1 = fopen("shuju.txt","ab+")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    for(j=i-n+1; j<=i; j++)
    {
		
        fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    fclose(fp1);
    
    n = 0;
}

/*
当储存过的学生信息变动时重新往文件中录入数据 
将所有学生信息全部以 写 的方式录入文件 
*/
void luru()
{
	FILE*fp;
    fp=fopen("student.txt","wb");
    int j;
    for(j=1; j<=i; j++)
    {
        fprintf(fp,"学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    printf("\n");
    fclose(fp);
    
    FILE *fp1;
    if((fp1 = fopen("shuju.txt","wb")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    for(j=1; j<=i; j++)
    {
    	fprintf(fp,"\n");
        fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        
    }
    fprintf(fp,"\n");
    fclose(fp1);
}

/*
读取函数
读取文件中储存的数据,赋值到student结构体数组中 
*/
void duqu()
{
	FILE *fp1;
    if((fp1 = fopen("shuju.txt","r")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    int stnum = 0,num = 0,l;
    char c[100],shuju[100];
	while(!feof(fp1))
	{
		
		num ++;
		if(num % 10 == 1)
		{
			stnum ++;
		}
		fgets(shuju,100,fp1);
		int j;
		j = 0;
		while(shuju[j] != '\n')
		{
			c[j] = shuju[j];
			j ++;
		}
		c[j] = '\0';
		
		if(num % 10 == 2)
			strcpy(aa[stnum].xh,c);
		if(num % 10 == 3)
			strcpy(aa[stnum].xm,c);
		if(num % 10 == 4)
			aa[stnum].nl = atoi(c);
		if(num % 10 == 5)
			strcpy(aa[stnum].xb1,c);
		if(num % 10 == 6)
			strcpy(aa[stnum].jg,c);
		if(num % 10 == 7)
			strcpy(aa[stnum].tele,c);
		if(num % 10 == 8)
			strcpy(aa[stnum].xb,c);
		if(num % 10 == 9)
			strcpy(aa[stnum].zy,c);
		if(num % 10 == 0)
			strcpy(aa[stnum].bj,c);
			
		if(feof(fp1))
		{
			num ++;
			break;
		}
	}
	fclose(fp1);
	
	i = num / 10;
	printf("\n文件中有%d个学生信息\n\n",i);
}
/*
清空文件中的数据 
*/
void del()
{
	FILE *fp;
	fp = fopen("student.txt","w");
	ftruncate(fileno(fp), 0);
	fclose(fp);
	i = 0;
	FILE *fp1;
	fp1 = fopen("shuju.txt","w");
	ftruncate(fileno(fp1), 0);
	fputs("\n",fp1); 
	fclose(fp1);
}


  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

活捉一只xiaozhu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值