【C语言课程设计】学生学籍管理系统

这是一个用于管理学生信息的系统,包括输入、浏览、查询、修改和删除功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>


//**********************************结构体*************************************
struct score
{
	char class_num[10];
	char person_num[10];
	char name[15];
	char sex;
	int  num;
}stu;



//******************************输出*******************************************
void print1()                                               //输出科目函数
{
printf("班级      学号      姓名              性别      分数\n");
}



//*****************************菜单********************************************
int menu()                                                  //菜单函数
{

	char i;
	printf("\n\n\n\n");
    puts("\t\t**********************主菜单******************\t\n");
    puts("\t\t\t\t1.学生信息输入                               \n");
    puts("\t\t\t\t2.学生信息浏览                               \n");
    puts("\t\t\t\t3.学生信息检索                               \n");
    puts("\t\t\t\t4.学生信息修改                               \n");
    puts("\t\t\t\t5.学生信息删除                               \n");
    puts("\t\t\t\t6. 退 出 系 统                               \n");
    puts("\t\t**********************************************\t\n");
    printf("\t\t\t  请选择(1-6):[ ]\b\b");
	i=getchar();
	system("cls");
	return i;
}







//**********************输入函数*******************************************
void Enter()
{

	FILE *fp;
	char ch;
	if((fp=fopen("f:\\zimou.txt","a+"))==NULL)
	{
		printf("\nCannot open file!\n");
		getch();
		exit(1);
	}
	do
	{
		printf("请输入班级:");scanf("%s",stu.class_num);getchar();
		printf("\n");
		printf("请输入学号:");gets(stu.person_num);
		printf("\n");
		printf("请输入姓名:");gets(stu.name);
		printf("\n");
		printf("性      别(m/f):");scanf("%c",&stu.sex);getchar();
		printf("\n");
		printf("分      数:");scanf("%d",&stu.num);getchar();
		printf("\n");
		fwrite(&stu,sizeof(stu),1,fp);
		printf("继续(y/n)?[ ]\b\b");
		ch=getchar();  getchar();
	}while(ch=='y'||ch=='Y');
	fclose(fp);
	system("cls");
}



//*****************浏览函数**********************************************
void Browse()
{

FILE *fp;
int total=0;
if((fp=fopen("f:\\zimou.txt","a+"))==NULL)
{
   printf("\tCan not open the inform file!");
   getch();
   exit(1);
}
while(fread(&stu,sizeof(stu),1,fp)==1)
{
   total++;
   if(total==1)
	print1();
    printf("%-10s%-10s%-20s",stu.class_num,stu.person_num,stu.name);
    printf("%-8c",stu.sex);
    printf("%-4d   ",stu.num);
    printf("\n");
}
fclose(fp);
printf("\n\n\t共有 %d 条记录!\n",total);
printf("\tpress any key to continue!");
getchar();
getchar();
system("cls");

}


//*******************查询函数*********************************************
void Query()
{
	FILE * fp;
    char num1[10];
    char ch;
if((fp=fopen("f:\\zimou.txt","a+"))==NULL)
{
   printf("\tCan not open the inform file!");
   getch();
   exit(1);
}
do
{
	getchar();
    rewind(fp);
    printf("\n请输入学号查询:");
    gets(num1);
    while(fread(&stu,sizeof(stu),1,fp)==1)
     if(strcmp(num1,stu.person_num)==0)
     {
		 print1();
         printf("%-10s%-10s%-20s",stu.class_num,stu.person_num,stu.name);
         printf("%-8c",stu.sex);
         printf("%-4d   ",stu.num);
         printf("\n");
		 break;
     }
	 puts("\n");
   printf("继续查询?(Y/N):[ ]\b\b");
   ch=getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
system("cls");
}


//**********************学生成绩修改函数***********************************

void Recopose()
{
     FILE * fp1,* fp2;
     char num1[10];
	 char ch;
	 getchar();
    do
	{
        if((fp1=fopen("f:\\zimou.txt","a+"))==NULL)
		{
        printf("\tCan not open the infom file!");
        getch();
        exit(1);
		}
        if((fp2=fopen("f:\\ziye.txt","a+"))==NULL)
		{
        printf("\tCan not creat the temp file!");
        getch();
        exit(1);
		}
        printf("请输入想要修改的学号:");
        gets(num1);
while(fread(&stu, sizeof(stu),1,fp1)==1)
{
        if(strcmp(num1,stu.person_num)==0)
		{
         print1();
         printf("%-10s%-10s%-20s",stu.class_num,stu.person_num,stu.name);
         printf("%-8c",stu.sex);
         printf("%-4d   ",stu.num);
         printf("\n");
         printf("\n\nPlease input the new information:\n");
         printf("\t班级代号:");gets(stu.class_num);
         printf("\t学生学号:");gets(stu.person_num);
         printf("\t学生姓名:"); gets(stu.name);
         printf("\t学生性别:");gets(&stu.sex);
         printf("\t学生成绩:");scanf("%d",&stu.num); getchar();
		}
    fwrite(&stu,sizeof(stu),1,fp2);
   }
   fclose(fp1);
   fclose(fp2);
   printf("修改成功!\n");
   remove("f:\\zimou.txt");
   rename("f:\\ziye.txt","f:\\zimou.txt");
   printf("继续修改?(Y/N):[ ]\b\b");
   ch=getchar(); getchar();
}while(ch=='Y'||ch=='y');
	system("cls");
}


//*********************删除函数******************************************
void Delete()
{
   	 FILE * fp1,* fp2;
     int flag;
     char num1[10];
	 char ch;
	 getchar();
     do
	 {
        if((fp1=fopen("f:\\zimou.txt","a+"))==NULL)
		{
           printf("\tCan not open the inform file!");
           getch();
           exit(1);
		}
        if((fp2=fopen("f:\\ziye.txt","a+"))==NULL)
		{
           printf("\tCan not creat the temp file!");
           getch();
           exit(1);
		}
        printf("请输入你要删除的学生的学号:");
        gets(num1);
        flag=0;
        while(fread(&stu,sizeof(stu),1,fp1)==1)
		{
           if(strcmp(num1,stu.person_num)==0)
		   {
              print1();
              printf("%-10s%-10s%-20s",stu.class_num,stu.person_num,stu.name);
              printf("%-8c",stu.sex);
              printf("%-4d   ",stu.num);
              printf("\n");
              flag=1;
		   }
		   else
			   fwrite(&stu,sizeof(stu),1,fp2);
		}
       fclose(fp1);
       fclose(fp2);
       if(flag==1)
	   {
          remove("f:\\zimou.txt");
          rename("f:\\ziye.txt","f:\\zimou.txt");
	   }
       else
          printf("Can not find this record!\n");
        printf("继续删除?(Y/N):[ ]\b\b");
        ch=getchar(); getchar();
	 }while(ch=='Y'||ch=='y');
	 system("cls");
}


//***********************************退出**************************************
void Exit()
{
	puts("\n\t\t\t\t感谢使用本系统!!\n\n\t\t\t\t有任何问题请联系:1005483758@qq.com \n");
	exit(0);
}

//******************欢迎界面********************************** 
void Welcome()
{
	  printf("\n\n");
   printf("  \t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
   printf("  \t┃**********************************************************┃\n");
   printf("  \t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
   printf("  \t┃***┃************************************************┃***┃\n");
   printf("  \t┃***┃***                                         ****┃***┃\n");
   printf("  \t┃***┃***        欢迎使用学生成绩管理系统         ****┃***┃\n");
   printf("  \t┃***┃***                                         ****┃***┃\n");
   printf("  \t┃***┃***                                         ****┃***┃\n");
   printf("  \t┃***┃***                    制作人:XXY          ****┃***┃\n");
   printf("  \t┃***┃***                                         ****┃***┃\n");
   printf("  \t┃***┃***                        2013.6.20        ****┃***┃\n");
   printf("  \t┃***┃***                                         ****┃***┃\n");
   printf("  \t┃***┃************************************************┃***┃\n");
   printf("  \t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
   printf("  \t┃**********************************************************┃\n");
   printf("  \t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
   puts("  \n\t                        ① 管理员登陆!                         \n");
   puts("  \n\t                        ② 游客  登陆!                         \n");
   printf("\n请选择登陆(1 or 2):[ ]\b\b");  / /左移一位“\b ” 
}











//*****************************主函数****************************************
int main()
{ 
		int i,k=0;
        char username[15],pwd[7],c;
		system("color 5e");//颜色
        Welcome(); 
	      c=getchar();getchar();
       if (c=='1')
	   {
            system("cls");//跳转页面。 
			puts("\n\n\n\n\n\n\n\t\t\t\t管 理 员 登 陆!\n\n\n\n\n\t\t\t\t   请 登 陆!"); 
			getchar();
	   		for(i=0;i<3;i++)
		        {
			   		 printf("\n请输入用户名:");
			        gets(username);
			        printf("\n请输入6位密码:");
			        gets(pwd);
					//判断条件 
			        if((strcmp(username,"xiaxianyun")==0)&&(strcmp(pwd,"123456")==0))
			        {
		                printf("\n您已经成功登录\n");
		                k=1;
		                for(i=0;i<20;i++)
		                {
		                        printf(".");
		                        Sleep(100);
		                }
	                system("cls");
	 
						while(1)
						switch(menu())
						{
							case '1':Enter();break;
							case '2':Browse();break;
							case '3':Query();break;
							case '4':Recopose();break;
							case '5':Delete();break;
							case '6':Exit();break;
						}
		        		break;
	        		}
	        	else
	                printf("\n用户名或密码无效 请重新输入:\n");
	        		continue;
	        	}
	        	 if(k==0)
                printf("\n连续输入错误3次 将退出程序\n");
        Sleep(2000);
        exit(1);
    	}
     else if(c=='2')//游客登录 
		{
			system("cls");//跳转页面。 
			puts("\n\n\n\n\n\n\n\t\t\t\t欢 迎 游 客 进 入!\n\n\n\n\n\t\t\t\t   请 确 定!"); 
			getchar();
			system("cls");
			while(1)
				switch(menu())
				{
					case '1':Enter();break;
					case '2':Browse();break;
					case '3':Query();break;
					case '4':system("cls");getchar();
					puts("\n\n\t\t对不起你没有权限修改!\n\n");
					printf("\t\tpress any key to continue!");getchar();system("cls");break;
					case '5':system("cls");getchar();
					puts("\n\n\t\t对不起你没有权限删除!\n\n");
					printf("\t\tpress any key to continue!");getchar();system("cls");break;
					case '6':Exit();break;	
				}
		} 	   
	return 0;
}

 

一、学籍管理系统 1.问题提出 为了分析教学效果并进行相应的学籍处理,各学校每到期末都对综合成绩进行分类统计、上报成绩汇总结果等,这给每位老师和学籍管理人员带来很大工作量。使用学籍管理系统可以减少工作者的工作负担。 2.功能要求 循环显示如图7(a)所示的主菜单。 ………………………………………………….        .………………………………………………………        …………………………………………………………. 请输入选项编号(0 ~4):.        . 请输入选项编号(0 ~4):.        .请输入选项编号(0 ~4):. ………………………………………………….        .………………………………………………………        …………………………………………………………. . 1——录入成绩.                . 1——按学号排序.               . 1——生成并打印补考通知单 . . 2——统计成绩.                . 2——计算平均分并排序 .         . 2——生成并打印退学通知单 . . 3——处理学籍.                . 3——统计分数段.               . 3——生成并打印新名册. . 4——创新功能.                . 4——返回.                    . 4——返回. . 0——退出系统.                . 0——退出系统.                 . 0——退出系统. ……………………………………………………         ……………………………………………………….        …………………………………………………………. 图7(a) 学籍管理主菜单            (b)成绩统计子菜单               (c)学籍处理子菜单 在主菜单中选择1:录入成绩。假设某班的原始成绩形式如下: 学号        姓名        高数    英语    物理    编程    马哲 0909339105 Huangying  89      92      85     88     82 0909339102 Zhangchen  72      68      83     90     78 0909339108 Linan      91      84      90     79     81 …… 其中,原始数据的排列是无序的。系统应能够保留原始成绩单。 在主菜单中选择2:进入如图7(b)所示的子菜单,并统计成绩。在此可以计算平均分、统计各分数段、按学号排序、按平均分排序。在子菜单选择1时,将该班学生的成绩按学号升序排序后的顺序存入std.dat文件中,以方便打印。在子菜单选择2时,求出每位学生的平均分,并按平均分从高到低的顺序进行排序后,写入文件sort.dat中。在子菜单选择3时,统计出各门课、各分数段学生的人数,并如表1所示的形式输出。在子菜单选择4时,返回主菜单;选择0,退出整个系统。 在主菜单选择3:进入如图7(c)所示的子菜单,并处理学籍。为不及格的学生打印重考通知单时,应在通知单上写明重考的课程、时间和地点(由键盘输入)。为了参加多门课重考的学生完成补考,应避免时间重复。为3门以上不及格的学生打印退学通知单。通知单上应写明学生的学号、姓名、退学原因(几门课不及格,成绩多少)。删除已退学的学生信息,将该班中升入高年级的学生信息写入文件next.dat中。在子菜单选择4,返回主菜单;选择0,退出整个系统。 在主菜单中选择4:此项功能学生自由发挥,根据本组爱好增加与本题止相关的新功能。 在主菜单中选择0:显示结束信息(如“感谢使用本软件!已正常退出,按任意键结束。”),按任意键后,退出本功能。 表1 各门课、各分数段学生的人数 ……………………………………………………………………………………………………………….   . 90以上. 80~89分.70~79分.60~69分.60分以下. 高数.      .       .       .       .       . 英语.      .       .       .       .       . 物理.      .       .       .       .       . 编程.      .       .       .       .       . 马哲.      .       .       .       .       . ……………………………………………………………………………………………………………….
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值