学生信息管理系统

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h>
 
struct record 
{
	char name[20];
    char age[10]; 
    char phone[20]; 
    char adress[40]; 
    char number[30];
    char B_number[30]; 
}contact[500];
 
int NO=0;
FILE *fp,*fp2;
 
void mainmenu();                     //主菜单
void newrecord();                    //新建菜单
void browsemenu();                   //浏览菜单
void searchmenu();                   //查找菜单
void searchname();                   //按姓名查找
void searchphone();                  //按电话查找
void modifymenu();                   //修改菜单
void deletemenu();                   //删除菜单
void deleteall();                    //删除所有
void deletesingle();                 //删除单个
void deletename();                   //按姓名删除
void deletephone();                  //按号码删除
void savefile();
void read_NO();
void over(); 

void main() 
{
	printf("\n\t\t      :)欢迎使用学生信息管理系统beta");
    printf("\n\t\t文件导入中……请稍后……\n\n\n\n\n"); 
    system("cls");

    while (1) 
	{
		mainmenu(); 
	} 
}

void mainmenu()                    //主菜单
{ 
	char choice; 
    system("cls");
    printf("\n\n\n") ;
    printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    printf("╠                      ┏━━━━━━━━━━━━━┓                      ╣\n");
    printf("╠**********************┃     学生信息管理系统     ┃**********************╣\n");
    printf("╠                      ┗━━━━━━━━━━━━━┛                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠                      ╭─────────────╮                      ╣\n");
    printf("╠**********************│     1   录入信息         │**********************╣\n");
    printf("╠                      ╰─────────────╯                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠                      ╭─────────────╮                      ╣\n");
    printf("╠**********************│     2   浏览信息         │**********************╣\n");
    printf("╠                      ╰─────────────╯                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠                      ╭─────────────╮                      ╣\n");
    printf("╠**********************│     3   查找信息         │**********************╣\n");
    printf("╠                      ╰─────────────╯                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠                      ╭─────────────╮                      ╣\n");
    printf("╠**********************│     4   修改信息         │**********************╣\n");
    printf("╠                      ╰─────────────╯                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠                      ╭─────────────╮                      ╣\n");
    printf("╠**********************│     5   删除信息         │**********************╣\n");
    printf("╠                      ╰─────────────╯                      ╣\n");
    printf("╠                                                                          ╣\n");
    printf("╠           ╭─────────────╮                      ╣\n");
    printf("╠**********************│     6     退出           │**********************╣\n");
    printf("╠           ╰─────────────╯                      ╣\n");
    printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    printf("\n\t\t请选择(1-6):"); 
    choice=getch(); 
    switch (choice) 
	{
	case '1':newrecord();break; 
    case '2':browsemenu();break; 
    case '3':searchmenu();break; 
    case '4':modifymenu();break; 
    case '5':deletemenu();break;
    case '6':exit(0);
    default:mainmenu(); 
	} 
}

void newrecord()                    //新建菜单
{
	printf("\n\t\t**************** 请输入学生信息 ****************\n"); 
	if((fp=fopen("contact.txt","r"))==0)
	{
		fp=fopen("contact.txt","w");
		fclose(fp);
		fp2=fopen("NO.txt","w");
		NO=0;
		fprintf(fp2,"NO=%d",NO);
		fclose(fp2);
	}
	read_NO();
    printf("\n\t输入姓名:    年龄:    电话号码:    家庭住址:    学号:    寝室号码:\n"); 
    scanf("%s%s%s%s%s%s",&contact[NO].name,&contact[NO].age,&contact[NO].phone,&contact[NO].adress,&contact[NO].number,&contact[NO].B_number);

    savefile();  
    printf("\n\t\t是否继续添加?(y/n):"); 
    if (getch()=='y') 
		newrecord();
    mainmenu();
}

void browsemenu()                   //浏览菜单
{ 
	int i; 
    system("cls");
	read_NO();
	fp=fopen("contact.txt","r");
	if(fp==0)
	{ 
		printf("\n\n\n\n\n\t\t\t    文件不存在"); 
		over();
	}
	for (i=0;i<NO;i++)
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
	fclose(fp);
    if(NO!=0) 
	{
		printf("\t\t*************** 以下为学生所有信息************\n"); 
        printf("\n\t\t╔═══╦══╦══════╦════╦══╦════╗\n");
		printf("\t\t║姓名  ║年龄║联系电话    ║家庭住址║学号║寝室号码║\n");
		for(i=0;i<NO;i++)
		{
			printf("\t\t╠═══╬══╬══════╬════╬══╬════╣\n");
		    printf("\t\t║%-6s║%-4s║%-12s║%-8s║%-4s║%-8s║\n",contact[i].name,contact[i].age,contact[i].phone,contact[i].adress,contact[i].number,contact[i].B_number);
		}
		printf("\t\t╚═══╩══╩══════╩════╩══╩════╝\n");
		printf("\t\t************************************************"); 
	}
	else
		printf("\n\t\t☆学生信息中无任何纪录☆"); 
    printf("\n\t\t☆按任意键返回主菜单☆:"); 
    getch(); 
    return; 
}

void searchmenu()                   //查找菜单
{
	char choice; 
    system("cls"); 
    printf("\n\t\t******************* 查找菜单 *******************"); 
    printf("\n\t\t*************** ☆1 .按姓名查找 *****************"); 
    printf("\n\t\t*************** ☆2 .按电话查找 *****************"); 
    printf("\n\t\t*************** ☆3 .返回主菜单 *****************"); 
    printf("\n\t\t************************************************"); 
    printf("\n\t\t请选择:"); 
    choice=getche(); 
    switch (choice) 
	{ 
	case '1':searchname();break; 
    case '2':searchphone();break; 
    case '3':mainmenu();break; 
	} 
}

void searchname()                   //按姓名查找
{
	int mark=0; 
    int i; 
    char name[20]; 
    printf("\n\t\t***************** 按姓名查找 *******************"); 
    printf("\n\t\t请输入学生姓名:"); 
    scanf("%s",name);
	read_NO();
	fp=fopen("contact.txt","r");
    for(i=0;i<NO;i++) 
	{ 
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
		
		if (strcmp(contact[i].name,name)==0) 
		{ 
			printf("\n\t\t************ 以下是您查找的学生信息 **********"); 
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t年    龄: %s",contact[i].age); 
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress); 
            printf("\n\t\t学    号: %s",contact[i].number);
            printf("\n\t\t寝室号码: %s",contact[i].B_number); 
            printf("\n\t\t************************************************");
			mark++;
		}
	}
	fclose(fp);
	if(mark==0)
		printf("\n\t\t没有该姓名的学生纪录"); 
	printf("\n\t\t按任意键返回主菜单"); 
    getch(); 
    return; 
}

void searchphone()                  //按电话查找
{ 
	int mark=0; 
    int i;  
    char phone[20]; 
    printf("\n\t\t****************** 按电话查找 ******************"); 
    printf("\n\t\t请输入电话:"); 
    scanf("%s",&phone);
	read_NO();
	fp=fopen("contact.txt","r");
    for(i=0;i<NO;i++) 
	{ 
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
		
		if (strcmp(contact[i].phone,phone)==0) 
		{ 
			printf("\n\t\t************ 以下是您查找的学生信息 **********"); 
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t年    龄: %s",contact[i].age); 
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress); 
            printf("\n\t\t学    号: %s",contact[i].number);
            printf("\n\t\t寝室号码: %s",contact[i].B_number); 
            printf("\n\t\t************************************************");
			mark++;
		}
	}
	fclose(fp);
	if(mark==0)
		printf("\n\t\t没有该姓名的学生纪录"); 
	printf("\n\t\t按任意键返回主菜单"); 
    getch(); 
    return; 
}

void modifymenu()                   //修改菜单
{
	int mark=0; 
    int i,k; 
    int t=0;
    char choice;
    char name[20];
    struct record modify;
    system("cls");
    printf("\n\t\t请输入您要修改的姓名:"); 
    scanf("%s",name); 
	read_NO();
	fp=fopen("contact.txt","r+");
	for(i=0;i<NO;i++)
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);

    for(i=0;i<NO;i++) 
	{ 
		if (strcmp(contact[i].name,name)==0) 
		{
			k=i;mark=1;
            modify=contact[i];
            printf("\n\t\t********** 以下是您将修改的学生信息 **********"); 
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t年    龄: %s",contact[i].age); 
            printf("\n\t\t联系电话: %s",contact[i].phone);
            printf("\n\t\t家庭住址: %s",contact[i].adress); 
            printf("\n\t\t 学   号: %s",contact[i].number);
            printf("\n\t\t寝室号码: %s",contact[i].B_number); 
            printf("\n\t\t是否继续?y/n");
            if(getch()=='n')
				modifymenu();
            else
			{
				printf("\n\t\t选择您要修改的选项:");
                printf("\n\t\t\t(1).姓    名");
                printf("\n\t\t\t(2).年    龄");
	            printf("\n\t\t\t(3).联系电话");
	            printf("\n\t\t\t(4).家庭住址");
	            printf("\n\t\t\t(5).学    号");
                printf("\n\t\t\t(6).寝室号码");
                printf("\n\t\t\t(7).返    回");
                printf("\n\t\t请选择: ");
                choice=getch();
                switch(choice)
				{ 
				case '1': printf("姓    名:"); scanf("%s",contact[i].name); break;
                case '2': printf("年    龄:"); scanf("%s",contact[i].age); break;
                case '3': printf("联系电话:"); scanf("%s",contact[i].phone); break;
                case '4': printf("家庭住址:"); scanf("%s",contact[i].adress); break;
                case '5': printf("学    号:"); scanf("%s",contact[i].number); break;
                case '6': printf("寝室号码:"); scanf("%s",contact[i].B_number); break;
                case '7': mainmenu(); break;
                default: modifymenu();
				}
				printf("\n\t\t您的修改结果为:");
	            printf("\n\t\t姓    名: %s",contact[i].name);
                printf("\n\t\t年    龄: %s",contact[i].age); 
                printf("\n\t\t联系电话: %s",contact[i].phone);
                printf("\n\t\t家庭住址: %s",contact[i].adress); 
                printf("\n\t\t学    号: %s",contact[i].number);
                printf("\n\t\t寝室号码: %s",contact[i].B_number); 
                printf("\n\t\t确认修改?y/n");
            	if(getch()=='n')
				{
					contact[i]=modify;
                    printf("\n\t\t修改未保存!");
				}
	            else 
				{
					fclose(fp);
					fp=fopen("contact.txt","w");
					for(i=0;i<NO;i++)
						fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[i].name,contact[i].age,contact[i].phone,contact[i].adress,contact[i].number,contact[i].B_number);
					fclose(fp);
					printf("\n\t\t修改成功!");
				}
                printf("\n\t\t是否继续修改?(y/n)"); 
                if (getch()=='y')
					modifymenu(); 
			} 
		}
	}
    if (mark==0) 
	{
		printf("\n\t\t没有该学生的纪录"); 
        printf("\n\t\t是否继续修改?(y/n)"); 
        if (getch()=='y') 
			modifymenu();
	} 
    return;
}

void deletemenu()                   //删除菜单
{ 
	char choice; 
	read_NO();
    if(NO==0) 
	{
		printf("\n\t\t对不起,文件中无任何纪录"); 
        printf("\n\t\t按任意键返回主菜单"); 
        getch(); 
        return; 
	} 
	system("cls"); 
    printf("\n\t\t******************* 删除菜单 *******************"); 
    printf("\n\t\t**************** ☆1 .删除所有 ******************");  
    printf("\n\t\t**************** ☆2 .删除单个 ******************"); 
    printf("\n\t\t**************** ☆3 .返回主菜单 *****************"); 
    printf("\n\t\t************************************************"); 
    printf("\n\t\t请选择:"); 
    choice=getch(); 
    switch(choice) 
	{ 
	case '1':deleteall();break; 
    case '2':deletesingle();break; 
    case '3':mainmenu();break; 
    default:mainmenu(); 
	} 
}

void deleteall()                    //删除所有
{ 
	printf("\n\t\t确认删除?(y/n)"); 
    if (getch()=='y') 
	{  
		fp=fopen("contact.txt","w");
		fclose(fp);
        NO=0;
		fp2=fopen("NO.txt","w");
		fprintf(fp2,"NO=%d",NO);
		fclose(fp2);
        printf("\n\t\t纪录已删除,按任意键返回主菜单"); 
        getch(); 
        return; 
	} 
    else 
		return; 
}

void deletesingle()                 //删除单个
{ 
	char choice; 
    printf("\n\t\t\t☆1 .按姓名删除"); 
    printf("\n\t\t\t☆2 .按号码删除");
    printf("\n\t\t\t☆3 .返回删除菜单");
    printf("\n\t\t请选择:"); 
    choice=getch(); 
    switch (choice) 
	{ 
    case '1':deletename();break; 
    case '2':deletephone();break; 
    case '3':deletemenu();break;
	} 
}

void deletename()                   //按姓名删除
{ 
	int i,j,k; 
    int mark=0; 
    char name[20]; 
    printf("\n\t\t请输入要删除该学生姓名:"); 
    scanf("%s",name);
	read_NO();
    if(NO==0) 
	{ 
		printf("\n\t\t对不起,文件中无任何纪录"); 
        printf("\n\t\t按任意键返回主菜单"); 
        getch(); 
        return; 
	} 
	fp=fopen("contact.txt","r");
	for(i=0;i<NO;i++)
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
	fclose(fp);
    for (i=0;i<NO;i++) 
	{ 
		if (strcmp(contact[i].name,name)==0) 
		{ 
			k=i;
			printf("\n\t\t以下是您要删除的学生纪录:"); 
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t年    龄: %s",contact[i].age); 
            printf("\n\t\t联系电话: %s",contact[i].phone); 
            printf("\n\t\t家庭住址: %s",contact[i].adress); 
            printf("\n\t\t学    号: %s",contact[i].number);
            printf("\n\t\t寝室号码: %s",contact[i].B_number); 
            printf("\n\t\t是否删除?(y/n)"); 
            if (getch()=='y') 
			{
				NO--;
				for(j=k;j<NO;j++) 
					contact[j]=contact[j+1]; 
				fp2=fopen("NO.txt","w");
				if(fp2==0)
					printf(".......");
				fprintf(fp2,"NO=%d",NO);
				fclose(fp2);		
				fp=fopen("contact.txt","w");
				if(fp==0)
					printf(".......//\\");
				for(j=0;j<NO;j++)
					fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[j].name,contact[j].age,contact[j].phone,contact[j].adress,contact[j].number,contact[j].B_number);
				fclose(fp);
                mark++; 
                printf("\n\t\t删除成功"); 
                printf("\n\t\t是否继续删除?(y/n)"); 
                if (getch()=='y')
					deletename(); 
                return; 
			} 
            else 
				return; 
		} 
        continue; 
	} 
    if (mark==0) 
	{ 
		printf("\n\t\t没有该学生的纪录"); 
        printf("\n\t\t是否继续删除?(y/n)"); 
        if (getch()=='y') 
			deletename(); 
        return; 
	}
}

void deletephone()                  //按号码删除
{ 
	int i,j,k; 
    int mark=0; 
    char phone[20]; 
    printf("\n\t\t请输入要删除联系电话:"); 
    scanf("%s",phone); 
	read_NO();
    if(NO==0) 
	{ 
		printf("\n\t\t对不起,文件中无任何纪录"); 
        printf("\n\t\t按任意键返回主菜单"); 
        getch(); 
        return; 
	} 
	fp=fopen("contact.txt","r");
	for (i=0;i<NO;i++)
		fscanf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",&contact[i].name,&contact[i].age,&contact[i].phone,&contact[i].adress,&contact[i].number,&contact[i].B_number);
	fclose(fp);
    for (i=0;i<NO;i++) 
	{ 
		if (strcmp(contact[i].phone,phone)==0) 
		{ 
			k=i;
			printf("\n\t\t以下是您要删除的学生纪录:"); 
            printf("\n\t\t姓    名: %s",contact[i].name);
            printf("\n\t\t年    龄: %s",contact[i].age); 
            printf("\n\t\t联系电话: %s",contact[i].phone); 
            printf("\n\t\t家庭住址: %s",contact[i].adress); 
            printf("\n\t\t学    号: %s",contact[i].number);
            printf("\n\t\t寝室号码: %s",contact[i].B_number); 
            printf("\n\t\t是否删除?(y/n)"); 
            if (getch()=='y') 
			{ 
				NO--;
				for (j=i;j<NO;j++) 
					contact[j]=contact[j+1]; 
				fp2=fopen("NO.txt","w");
				fprintf(fp2,"NO=%d",NO);
				fclose(fp2);
				fp=fopen("contact.txt","w");
				for(j=0;j<NO;j++)
					fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[j].name,contact[j].age,contact[j].phone,contact[j].adress,contact[j].number,contact[j].B_number);
				fclose(fp);
                mark++; 
                printf("\n\t\t删除成功"); 
                printf("\n\t\t是否继续删除?(y/n)"); 
                if (getch()=='y')
					deletename(); 
                return; 
			} 
            else 
				return; 
		} 
        continue; 
	} 
    if (mark==0) 
	{ 
		printf("\n\t\t没有该学生的纪录"); 
        printf("\n\t\t是否继续删除?(y/n)"); 
        if (getch()=='y') 
        deletephone(); 
        return; 
	}
}

void savefile()
{ 
	int i; 
   	fp=fopen("contact.txt","a+");
	fseek(fp,0,SEEK_END);
	fprintf(fp,"姓名:%s\n年龄:%s\n联系电话:%s\n家庭住址:%s\n学号:%s\n寝室号码:%s\n\n",contact[NO].name,contact[NO].age,contact[NO].phone,contact[NO].adress,contact[NO].number,contact[NO].B_number);
	fclose(fp);
	NO++;
	fp2=fopen("NO.txt","w");
	fprintf(fp2,"NO=%d",NO);
	fclose(fp2);
    printf("\n\t\t已成功保存至文件!\n");
}

void read_NO()
{
	fp2=fopen("NO.txt","r");
	if(fp2==NULL)
	{
		printf("\n\t\t对不起,文件中无任何纪录");
		over();
	}
	fscanf(fp2,"NO=%d",&NO);
	fclose(fp2);
}

void over()
{
	printf("\n\t\t按任意键返回主菜单");
	getch();
	mainmenu();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值