1. 程式人生 > >C語言學籍管理系統原始碼

C語言學籍管理系統原始碼

C語言學籍管理系統,整理一份。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 100
void mycreat();
void mynewcreat();
void mydisplay();
void myretake();
void myselect();
void mynumsort();
void mysort();
void myprint1();
void myprint2();
void myprint3();
void myfenduan();
struct student
{
	char name[10];
	int grade[5];
	double ave;
	char num[10];
	
};
void myprint1()
{
	char choose='\0',yes_no='\0';
	do
   	{  
		system("cls");
		printf ("      |---------------------------|\n");
		printf ("      |   請輸入選項編號(0-4)     |\n");
		printf ("      |---------------------------|\n");
		printf ("      |   1----------錄入成績     |\n");
		printf ("      |   2----------統計成績     |\n");
		printf ("      |   3----------處理學籍     |\n");
		printf ("      |   4----------顯示資料     |\n");
		printf ("      |   0----------退出系統     |\n");
		printf ("      |---------------------------|\n");
		printf("                        ");
      	choose=getche();
      	switch(choose)
       	{  	case '1':mycreat();  break;   	
			case '2':myprint2();  break;  	
	    	case '3':myprint3();  break;   	
	    	case '4':mydisplay();  break;    
	    	case '0':break;
	    	default :printf("\n                       %c為非法選項!\n",choose);
		}
      	if(choose=='0')
			{	
			printf("\n");
			printf("感謝您的使用!\n");
			break;
			}
      	printf("\n                        要繼續選擇嗎(Y/N)?\n");
      	do
      	{ 	yes_no=getch( );
      	} while(yes_no!='Y' && yes_no!='y'&& yes_no!='N' && yes_no!='n');
		} while(yes_no=='Y' || yes_no=='y');
}


void myprint2()
{
	char choose='\0',yes_no='\0';
	do
   	{  
		system("cls");
		printf ("      |-----------------------------------|\n");
		printf ("      |   請輸入選項編號(0-4)             |\n");
		printf ("      |-----------------------------------|\n");
		printf ("      |   1----------按學號排序           |\n");
		printf ("      |   2----------計算平均分並排序     |\n");
		printf ("      |   3----------統計分數段           |\n");
		printf ("      |   4----------返回                 |\n");
		printf ("      |   0----------退出系統             |\n");
		printf ("      |-----------------------------------|\n");
		printf("                        ");
      	choose=getche();
      	switch(choose)
       	{  	case '1':mynumsort();  break;   	
			case '2':mysort();  break;  	
	    	case '3':myfenduan();  break;   	
	    	case '4':myprint1();  break;    
	    	case '0':break;
	    	default :printf("\n                       %c為非法選項!\n",choose);
		}
      	if(choose=='0')
			{	
			printf("\n");
			printf("感謝您的使用!\n");
			break;
			}
      	printf("\n                        要繼續選擇嗎(Y/N)?\n");
      	do
      	{ 	yes_no=getch( );
      	} while(yes_no!='Y' && yes_no!='y'&& yes_no!='N' && yes_no!='n');
		} while(yes_no=='Y' || yes_no=='y');
}

void myprint3()
{
	char choose='\0',yes_no='\0';
	do
   	{  
		system("cls");
		printf ("      |---------------------------------------|\n");
		printf ("      |   請輸入選項編號(0-4)                 |\n");
		printf ("      |---------------------------------------|\n");
		printf ("      |   1----------生成並列印補考通知單     |\n");
		printf ("      |   2----------生成並列印退學通知單     |\n");
		printf ("      |   3----------生成並列印新名冊         |\n");
		printf ("      |   4----------返回                     |\n");
		printf ("      |   0----------退出系統                 |\n");
		printf ("      |---------------------------------------|\n");
		printf("                        ");
      	choose=getche();
      	switch(choose)
       	{  	case '1':myretake();  break;   	
			case '2':myselect();  break;  	
	    	case '3':mynewcreat();  break;   	
	    	case '4':myprint1();  break;    
	    	case '0':break;
	    	default :printf("\n                       %c為非法選項!\n",choose);
		}
      	if(choose=='0')
			{	
			printf("\n");
			printf("感謝您的使用!\n");
			break;
			}
      	printf("\n                        要繼續選擇嗎(Y/N)?\n");
      	do
      	{ 	yes_no=getch( );
      	} while(yes_no!='Y' && yes_no!='y'&& yes_no!='N' && yes_no!='n');
		} while(yes_no=='Y' || yes_no=='y');
}

void mycreat()
{
	int i=1,j=0;
	struct student temp={0};
	FILE*fp=NULL;
	fp=fopen("d:\\yuan.dat","w");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	system("cls");
	printf("注意:輸入學號時請將所有位數保持一致不足位用0補齊。例如最大學號為1000則均保持4位有效數字。");
	printf("\n        請輸入第1個記錄:\n");
	printf("      學號(用#結束輸入):");
	do
	{
		gets(temp.num);
	}while(strcmp(temp.num,"")==0);
	printf("        姓名(用#結束輸入):");
	gets(temp.name);
	printf("    請輸入 高數 英語 物理 程式設計 馬哲 5組成績(用#結束輸入): ");
	for(j=0;j<=4;j++)
	{
		scanf("%d",&temp.grade[j]);
	}

	while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.grade[0]!='#')
	{
		fprintf(fp,"%23s%15s",temp.num,temp.name);
		for(j=0;j<=4;j++)
		{
			fprintf(fp,"%5d",temp.grade[j]);
		}
		fprintf(fp,"\n");
		i++;
		printf("\n         請輸入第%d個記錄:\n",i);
		printf("            學號(用#結束輸入):");
		do
		{
			gets(temp.num);
		}while(strcmp(temp.num,"")==0);
			printf("        姓名(用#結束輸入):");
		gets(temp.name);
		printf("    請輸入 高數 英語 物理 程式設計 馬哲 5組成績 (用#結束輸入): ");
		for(j=0;j<=4;j++)
		{
			scanf("%8d",&temp.grade[j]);
		}

	}
	fclose(fp);
}
void mynumsort()
{
	int i=0,j=0,k=0,n=0,grade=0,num=0,m=0,ww;
	struct student temp[N]={0};
	struct student a;
	FILE *fp=NULL;
	FILE *fq=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("\n       開啟檔案失敗!\n");
		return;

	}
	system("cls");
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}
	printf("n=%d",n);
	fclose(fp);
   	printf("\n");
   	for(i=0; i<n; i++)                
    { 	k=i;
    	for(j=k+1; j<n; j++)
		 	if(strcmp(temp[k].num,temp[j].num)>0)  
				k=j;
  		a=temp[i];  
		temp[i]=temp[k]; 
		temp[k]=a;
    }
   	for(k=0;k<n;k++)
	{
		printf("%10s號  %10s同學",temp[k].num,temp[k].name);
		for(m=0;m<5;m++)
		{
			printf("%5d分",temp[k].grade[m]);
		}
		printf("\n");
	}
	if(n==0)printf("\n     檔案中無記錄!\n");
	else printf("\n         檔案中有%d個記錄",n);

	fq=fopen("d:\\std.dat","w");
	if(fq==NULL)
	{
		printf("開啟檔案失敗!\n");
		exit(0);
	}
	for(i=0;i<n;i++)
	{
		fprintf(fq,"%23s%15s",temp[i].num,temp[i].name);
		for(j=0;j<5;j++)
		{
			fprintf(fq,"%2d",temp[i].grade[j]);
		}
		fprintf(fq,"\n");
	}
	fclose(fq);
	printf("計算已完成 儲存在d:\std.dat檔案當中,請查驗");
}
void mysort()
{
	struct student temp[N]={0},a[N]={0};
	int i=0,j=0,n=0,ww=0;
	FILE*fp=NULL;
	FILE*fq=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		exit(0);
	}
	system("cls");
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}

	for(i=0;i<n;i++)
	{
		for(j=0;j<5;j++)
		{
			temp[i].ave=temp[i].ave+temp[i].grade[j];
		}
		temp[i].ave=temp[i].ave/5;
		
	}
	for(i=0;i<n;i++)
	{
		if(temp[i].ave<temp[i+1].ave)
		{
			a[i]=temp[i];
			temp[i]=temp[i+1];
			temp[i+1]=a[i];
		}
	}
	fq=fopen("d:\\sort.dat","w");
	if(fq==NULL)
	{
		printf("開啟檔案失敗!\n");
		exit(0);
	}
	for(i=0;i<n;i++)
	{
		fprintf(fq,"%23s%15s%10.2f",temp[i].num,temp[i].name,temp[i].ave  );

		for(j=0;j<5;j++)
		{
			fprintf(fq,"%2d",temp[i].grade[j]);
		}
		fprintf(fq,"\n");
	}

	fclose(fq);
	printf("計算已完成 儲存在d:\sort.dat檔案當中,請查驗");
}

void myfenduan()
{	
	int i=0,j=0,n=0,ww;
	int b[N]={0},c[N]={0},d[N]={0},e[N]={0},f[N]={0};
	struct student temp[N]={0};
	FILE*fp=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	system("cls");
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<5;j++)
			{
				if(temp[i].grade[j]>=90)
					b[j]=b[j]+1;
				else if(temp[i].grade[j]>=80)
					c[j]=c[j]+1;
				else if(temp[i].grade[j]>=70)
					d[j]=d[j]+1;
				else if(temp[i].grade[j]>=60)
					e[j]=e[j]+1;
				else f[j]=f[j]+1;
			}
	}
	printf("各門課、各分數段學生的人數\n");
	printf("________________________________________________________\n");
	printf("     |90分以上 | 80~89分 | 70~79分 | 60~69分 | 60分以下 \n");
	printf("--------------------------------------------------------\n");
	printf("高數_____%d________%d_________%d________%d_________%d___\n",b[0],c[0],d[0],e[0],f[0]);
	printf("__________________________________________________\n");
	printf("英語_____%d________%d_________%d________%d_________%d___\n",b[1],c[1],d[1],e[1],f[1]);
	printf("__________________________________________________\n");
	printf("物理_____%d________%d_________%d________%d_________%d___\n",b[2],c[2],d[2],e[2],f[2]);
	printf("__________________________________________________\n");
	printf("程式設計_____%d________%d_________%d________%d_________%d___\n",b[3],c[3],d[3],e[3],f[3]);
	printf("__________________________________________________\n");
	printf("馬哲_____%d________%d_________%d________%d_________%d___\n",b[4],c[4],d[4],e[4],f[4]);
	printf("__________________________________________________\n");
	fclose(fp);
}
void mydisplay()
{	int n=0,j=0,k=0,m=0,ww;
	struct student temp[N]={0};
	FILE*fp=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	system("cls");
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}
	for(k=0;k<n;k++)
	{
		printf("%23s  %15s  ",temp[k].num,temp[k].name);
	
		for(m=0;m<5;m++)
		{
			printf("%d  ",temp[k].grade[m]);
		}
		printf("\n");
	}
	if(n==0)printf("\n  檔案中無記錄!\n");
	else printf("\n     檔案中共有%d個記錄!",n);
	fclose(fp);
}
	
void myretake()
{
	int i=0,e=0,j=0,n=0,s[5]={0},ww;
	struct student temp[N]={0};
	FILE*fp=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}
	for (i=0;i<n;i++)
	{
		for(j=0;j<5;j++)
		{
			if(temp[i].grade[j]<60)
			s[i]++;
		}
		
		if(s[i]>=1 && s[i]<=3)
		{	printf("\n");
			printf("學號%10s   姓名%10s \n",temp[i].num,temp[i].name);
		if(temp[i].grade[0]<60)
			printf("%10s您的高數成績為%6d,需要補考,請於2011年2月26日上午9點在教學樓5023教室進行補考考試\n",temp[i].name,temp[i].grade[0]);
		
		if(temp[i].grade[1]<60)
			printf("%10s您的英語成績為%6d,需要補考,請於2011年2月27日上午9點在教學樓5023教室進行補考考試\n",temp[i].name,temp[i].grade[1]);
		
		if(temp[i].grade[2]<60)
	        printf("%10s您的物理成績為%6d,需要補考,請於2011年2月28日上午9點在教學樓5023教室進行補考考試\n",temp[i].name,temp[i].grade[2]);
		
		if(temp[i].grade[3]<60)
	        printf("%10s您的程式設計成績為%6d,需要補考,請於2011年2月26日下午3點在教學樓5023教室進行補考考試\n",temp[i].name,temp[i].grade[3]);
		
		if(temp[i].grade[4]<60)
	        printf("%10s您的馬哲成績為%6d,需要補考,請於2011年2月28日下午3點在教學樓5023教室進行補考考試\n",temp[i].name,temp[i].grade[4]);
		}
	}
	for(e=0;e<n;e++)
	{
		if(s[e]!=0)
		{
			printf("\n");
			printf("以上學生需要補考!");
		}
		else
		{
			printf("\n");
			printf("沒有學生需要補考!");
		}
		break;
	}
}
void myselect()
{
	int i=0,k=0,s[5]={0},n=0,j=0,ww;
	struct student temp[N]={0};
	FILE*fp=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		
		for(j=0;j<5;j++)
			{
				ww=fscanf(fp,"%d",&temp[n].grade[j]);
				if(ww==-1) break;
		}
		n++;
	}
       for(i=0;i<n-1;i++)
	   {
              
		   for(k=0;k<5;k++)
			 {
			   if (temp[i].grade[k]<60)
				   s[i]=s[i]+1;
			  }		  
			if(s[i]>3)
			{
				printf("\n");
				printf("學號%10s  姓名%10s  由於您不及格的科目為%d門(多於3門),因此退學。\n",temp[i].num,temp[i].name,s[i]);
				if (temp[i].grade[0]<60)
					printf("%15s您的高數成績為%6d,為不及格。\n",temp[i].name,temp[i].grade[0]);
					
				if  (temp[i].grade[1]<60)
					printf("%15s您的英語成績為%6d,為不及格。\n",temp[i].name,temp[i].grade[1]);
					
				if  (temp[i].grade[2]<60)
					printf("%15s您的物理成績為%6d,為不及格。\n",temp[i].name,temp[i].grade[2]);
					
				if  (temp[i].grade[3]<60)
					printf("%15s您的程式設計成績為%6d,為不及格。\n",temp[i].name,temp[i].grade[3]);
					
				if  (temp[i].grade[4]<60)
					printf("%15s您的馬哲成績為%6d,為不及格。\n",temp[i].name,temp[i].grade[4]);
					
			}
	   }
}

void mynewcreat()
{
	int i=0,k=0,s[5]={0},z[5]={0},v=0,n=0,m=0,j=0,p=0,c=0,ww;
	struct student temp[N]={0};
	FILE*fp=NULL;
	FILE*fq=NULL;
	fp=fopen("d:\\yuan.dat","r");
	if(fp==NULL)
	{
		printf("開啟檔案失敗!\n");
		return;
	}
	while(feof(fp)==0)
	{
		ww=fscanf(fp,"%23s%15s",temp[n].num,temp[n].name);
		if(ww==-1) break;
		for(j=0;j<5;j++)
		{
			fscanf(fp,"%d",&temp[n].grade[j]);
			
		}
		n++;
	}
		while(i<=n)
		{
			for(k=0;k<5;k++)
			{
				if (temp[i].grade[k]<60)
				s[i]=s[i]+1;
			}
			
			for(v=0;v<5;v++)
			{
				if(temp[i].grade[v]==0)
					z[i]++;
			}
			if(z[i]==5)
			{
				break;
			}
			if(s[i]<=3)
			{
				i++;
			}
			if(s[i]>3)
			{
				for(c=i;c<=n;c++)
				{
					temp[c]=temp[c+1];
				}
				s[i]=0;	
			}
		}			
		printf("\n");
		printf("刪除已退學的學生後,學生名冊為:");
		printf("\n");
		for(p=0;p<n-1;p++)
		{
			printf("\n");
			printf("%10s號  %10s分  ",temp[p].num,temp[p].name);
			for(m=0;m<5;m++)
				{
					printf("%d  ",temp[p].grade[m]);
				}
			printf("\n");
		}
	fq=fopen("d:\\next.dat","w");
	if(fq==NULL)
	{
		printf("開啟檔案失敗!\n");
		exit(0);
	}
	for(i=0;i<n;i++)
	{
		fprintf(fq,"%23s%15s",temp[i].num,temp[i].name);
		for(j=0;j<5;j++)
		{
			fprintf(fq,"%2d",temp[i].grade[j]);
		}
		fprintf(fq,"\n");
	}
fclose(fq);
	printf("計算已完成 儲存在d:\next.dat檔案當中,請查驗");
}
main()
{
	myprint1();       }

有時間整理整理學過的,溫故知新。

推薦:


關注微信公眾號“資料線上”,回覆“C語言原始碼”,即可獲得C語言原貌包

更多資源等著你