1. 程式人生 > >純C語言學生管理系統(學生期末作業)

純C語言學生管理系統(學生期末作業)

**

純C語言學生管理系統(學生期末作業)

**

分為7大功能:增、刪、查、改、預覽、儲存、匯出

程式碼都加有註釋,利於不懂的,理解

新增功能

//新增學生
void input ()
{
	int i;
	int j,ge;
	DaoChu();
	printf("你要儲存幾個學生的資訊:");
	scanf("%d",&ge);
	for(i=count;i<count+ge;i++)//遍歷裡面的資料,
	{
	printf("請輸入學號:");
	scanf("%d",&data[i].id );
 	for (j=0; j<i; j++)//// 跟資料來源的資料比較,是否有一樣的學號
	{
		if( data[i].id==data[j].id )/// 比較
		{
			printf("學號重複!請你重新輸入:\n");
		}
	}
	printf("請輸入姓名:");
	scanf("%s",&data[i].name);//輸入的資料直接儲存到地址
	printf("輸入手機號:");
	scanf("%s",&data[i].phone);
	printf("以下輸入成績\n");
	printf("語文:");
	scanf("%d",&data[i].score[0]);

	printf("數學:");
	scanf("%d",&data[i].score[1]);
	printf("英語:");
	scanf("%d",&data[i].score[2]);
	Sleep(1000);
	printf("新增成功\n");
	Sleep(800);
	system("CLS");
}
	count =count+ge;
	CunChu();//輸入完資料 儲存到本地
}

刪除功能如下:

void move ()
{

	int i,f;
	int j,n;
	char move[10];
	struct data *p=NULL;//定義
	int k=0;
	DaoChu();
	system("CLS");
	printf("刪除全部輸入all、單個one:\n");
	scanf("%s",move);
	if(strcmp(move,"all")==0)
	{
		for (f=0;f<count;f++)
		{
			count=0;
			CunChu();
		}
		printf("刪除成功\n");
			
	}
	else if(strcmp(move,"one")==0)
	{
	printf("請輸入你要刪除學生的學號:");
	scanf("%d",&i);
	for(n=0;n<count;n++)
	{
		if(i==data[n].id)
		{
 			k=1;j=n;break;//如果找到該學號就把k設為真 ,n的值賦給j
		}
	}

	if(k)
	{
		if(count==1)
		{
			p=&data[0];//如果刪除最後一個學生資訊幾把p指向它的首地址 然後釋放掉
			free(p);//釋放記憶體free這是釋放記憶體的函式
			count=0;//然後個數設為0
		}
		else
		{
			for(i=j;i<=count;i++)
			{ 
				data[i]=data[i+1];//如果還有多個學生的話,就用後面一個學生往上移一位,覆蓋那個學生
			}
			count=count-1;//個數減一
		}
		printf("刪除成功\n\n");
		CunChu();//然後儲存資料

	 }
	
	else
		printf("輸入資料錯誤!\n");	
	}

}

查詢功能

/// 查詢學生,按學號查詢
void find()
{

	int xuehao;
	int i,k=0;
	DaoChu();
	if (count==0)
	{
		printf("沒有任何資料\n");
		return;
	}
	printf("請輸入你要查詢學生的學號:");
	scanf("%d",&xuehao);
	printf("學號\t姓名\t  手機號  \t英語\t數學\t語文\t總分\n");
	printf("---------------------------------------------------------\n");

	for(i=0;i<count;i++)
	{
		if(xuehao==data[i].id)//如果找到這個學生的學號就列印他的所有資訊
		{		
			k=1;
			printf("%d\t%s\t%s\t%d\t%d\t%d\t",data[i].id,data[i].name,data[i].phone,data[i].score[0],data[i].score[1],data[i].score[2]);
			data[i].score[3]=data[i].score[0]+data[i].score[1]+data[i].score[2];
			printf("%d\n",data[i].score[3]);

		}

	}
	if (k==0)
	{

		printf("沒有該學生,是否輸入有錯\n");
	}
	printf("---------------------------------------------------------\n");

}

修改功能

//修改函式
/*  工作原理
這個函式是先把資料匯出,然後再判斷輸入的學號是否一樣,找到一樣的就修改
然後再儲存進去!
*/
void revise()
{
	int m=0;
	int xuehao,xx,j,i;
	FILE *fp;
	int f=0;
	DaoChu();//呼叫匯出資料函式 
	printf("請輸入你要修改的學號:");
	scanf("%d",&xuehao);
	for(xx=0;xx<count;xx++)
	{
		if(xuehao==data[xx].id)
		{
			printf("找到該學生!可以修改\n");
			f=1;
			printf("請輸入學號:");
			scanf("%d",&data[xx].id);		
				for (i=0; i<xx; i++)//// 跟資料來源的資料比較,是否有一樣的學號
				{
					if( data[xx].id==data[i].id )/// 比較
					{
						printf("學號重複!請你重新輸入:\n");
						continue;
					}
				}
			printf("請輸入姓名:");
			scanf("%s",&data[xx].name);
			printf("輸入手機號:");
			scanf("%s",&data[xx].phone);
			printf("以下輸入成績\n");
			printf("語文:");
			scanf("%d",&data[xx].score[0]);
			printf("數學:");
			scanf("%d",&data[xx].score[1]);
			printf("英語:");
			scanf("%d",&data[xx].score[2]);
			printf("修改成功\n");	
			CunChu();
			break;
   	}	
	}
	if(!f)
	printf("沒有找到!\n");
}
//學生列表資訊
void list_all()
{

	int j;
	DaoChu();
	system("CLS");
	printf("    學號      姓名     手機號     英語  數學  語文    總分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("總數:%d\n",count);
}

瀏覽功能

void list_all()
{
	int j;
	DaoChu();
	system("CLS");
	printf("    學號      姓名     手機號     英語  數學  語文    總分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("總數:%d\n",count);
}

匯入本地

//存到檔案
void CunChu()
{
	int i;
	FILE *rs;//定義一個檔案指標rs
	if((rs=fopen("student.txt","w"))==NULL)//如果指定檔案不存在則無法開啟,就新建
	{
		printf("not open");
		exit(0);//退出
	}
	for(i=0;i<count;i++)
	{
		fwrite(&data[i], sizeof(data[i]), 1, rs);
	}
	if(ferror(rs))//如果ferror返回值為0(假),表示未出錯。如果返回一個非零值,表示出錯
	{
		fclose(rs);//如果出錯就關閉檔案流
		perror("寫檔案失敗!\n");
		return;
	}
	printf("儲存檔案成功!\n");
	fclose(rs); //關閉檔案流
	Sleep(1000);
	system("CLS");

}

匯出檔案

void DaoChu()
{
	struct data t;//定義一個結構體型別 t
	int i=0;
	FILE* fp = fopen("student.txt", "r");//fp指標指向所開啟的檔案
	count=0;
	if(fp==NULL)//如果開啟的檔案不存在就執行以下
	{
		perror("讀取檔案開啟失敗!\n");
		return;
	}
	memset(data,0x0,sizeof(data));//它把陣列的起始地址作為其第一個引數,第二個引數是設定陣列每個位元組的值,第三個引數是陣列的長度(位元組數,不是元素個數)

	while(1)//能開啟檔案就執行以下讀取資料
	{
		fread(&t,sizeof(t),1,fp);//如果有檔案的話,就依此讀取檔案&t表示首地址 t表示資料塊長度
		if(ferror(fp))//如果出錯就讀取失敗ferror
		{
			fclose(fp);
			perror("讀檔案過程失敗!\n");
			return;
		}
		if(feof(fp))//這判斷如果到達檔案尾部就應該停止
		{
			break;
		}
		data[i]=t;//把t的資料賦給i
		i++;//然後i以下加上
	}

	fclose(fp);//讀取完後關閉檔案流,否則會造成控制代碼洩露
	count=i;//然後把i的個數賦給全域性變數
	printf("匯出檔案成功!\n");

}

選單

//選單功能
void mune()
{
	char cmdline[128];
	while(1)
	{

		printf("\n\n\t\t\t歡迎來到我的學生管理系統!\n");	   
		printf("\t\t\t\t新增:add \n\t\t\t\t查詢:find \n\t\t\t\t刪除:move \n\t\t\t\t瀏覽:list\n\t\t\t\t修改:revise\n\t\t\t\t儲存:input \n\t\t\t\t匯出:output  \n\t\t\t\t退出:exit \n");
		printf ("請輸入你的指令:");
		scanf("%s",cmdline);
		//選單處理
		if (strcmp(cmdline,"revise")==0)
		{
			revise();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"exit")==0)
		{
			printf("退出系統\n");
			break;
		}
		//選單處理
		if (strcmp(cmdline,"add")==0)
		{
			input();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"find")==0)
		{
			find();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"move")==0)
		{
			move();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"list")==0)
		{
			list_all();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"input")==0)
		{
			CunChu();
			continue;
		}

		if (strcmp(cmdline,"output")==0)
		{
			DaoChu();
			continue;
		}

		printf("輸入指令有誤,請重新輸入!\n");
	}
}

int main ()
{
mune();//直接呼叫選單函式
return 0;
}

專案原始碼如下:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"


#define N 1000
/*學生資訊管理系統

/*定義一個學生資訊類的結構體
*/
 typedef struct data
{
	unsigned int id;
	char name[16];
	char phone[16];
	int  score[4];// 這表示成績 語數英 和總分

}STUDENT;
STUDENT data [N];//資料來源;錄入的資訊先存到這裡
int count =0;//記錄個數;
void CunChu();//宣告 後面呼叫
void DaoChu();
//新增學生
void input ()
{
	int i;
	int j,ge;
	DaoChu();
	printf("你要儲存幾個學生的資訊:");
	scanf("%d",&ge);
	for(i=count;i<count+ge;i++)//遍歷裡面的資料,
	{
	printf("請輸入學號:");
	scanf("%d",&data[i].id );
 	for (j=0; j<i; j++)//// 跟資料來源的資料比較,是否有一樣的學號
	{
		if( data[i].id==data[j].id )/// 比較
		{
			printf("學號重複!請你重新輸入:\n");
			continue;
		}
	}

	printf("請輸入姓名:");
	scanf("%s",&data[i].name);//輸入的資料直接儲存到地址
	printf("輸入手機號:");
	scanf("%s",&data[i].phone);
	printf("以下輸入成績\n");
	printf("語文:");
	scanf("%d",&data[i].score[0]);

	printf("數學:");
	scanf("%d",&data[i].score[1]);
	printf("英語:");
	scanf("%d",&data[i].score[2]);
	Sleep(1000);
	printf("新增成功\n");
	Sleep(800);
	system("CLS");
}
	count =count+ge;
	CunChu();//輸入完資料 儲存到本地

}

/// 查詢學生,按學號查詢
void find()
{

	int xuehao;
	int i,k=0;
	DaoChu();
	if (count==0)
	{
		printf("沒有任何資料\n");
		return;
	}
	printf("請輸入你要查詢學生的學號:");
	scanf("%d",&xuehao);
	printf("學號\t姓名\t  手機號  \t英語\t數學\t語文\t總分\n");
	printf("---------------------------------------------------------\n");

	for(i=0;i<count;i++)
	{
		if(xuehao==data[i].id)//如果找到這個學生的學號就列印他的所有資訊
		{		
			k=1;
			printf("%d\t%s\t%s\t%d\t%d\t%d\t",data[i].id,data[i].name,data[i].phone,data[i].score[0],data[i].score[1],data[i].score[2]);
			data[i].score[3]=data[i].score[0]+data[i].score[1]+data[i].score[2];
			printf("%d\n",data[i].score[3]);

		}

	}
	if (k==0)
	{

		printf("沒有該學生,是否輸入有錯\n");
	}
	printf("---------------------------------------------------------\n");

}

//刪除一個學生的資訊
void move ()
{

	int i,f;
	int j,n;
	char move[10];
	struct data *p=NULL;//定義
	int k=0;
	DaoChu();
	system("CLS");
	printf("刪除全部輸入all、單個one:\n");
	scanf("%s",move);
	if(strcmp(move,"all")==0)
	{
		for (f=0;f<count;f++)
		{
			count=0;
			CunChu();
		}
		printf("刪除成功\n");
			
	}
	else if(strcmp(move,"one")==0)
	{
	printf("請輸入你要刪除學生的學號:");
	scanf("%d",&i);
	for(n=0;n<count;n++)
	{
		if(i==data[n].id)
		{
 			k=1;j=n;break;//如果找到該學號就把k設為真 ,n的值賦給j
		}
	}

	if(k)
	{
		if(count==1)
		{
			p=&data[0];//如果刪除最後一個學生資訊幾把p指向它的首地址 然後釋放掉
			free(p);//釋放記憶體free這是釋放記憶體的函式
			count=0;//然後個數設為0
		}
		else
		{
			for(i=j;i<=count;i++)
			{ 
				data[i]=data[i+1];//如果還有多個學生的話,就用後面一個學生往上移一位,覆蓋那個學生
			}
			count=count-1;//個數減一
		}
		printf("刪除成功\n\n");
		CunChu();//然後儲存資料

	 }
	
	else
		printf("輸入資料錯誤!\n");	
	}

}
//存到檔案
void CunChu()
{
	int i;
	FILE *rs;//定義一個檔案指標rs
	if((rs=fopen("student.txt","w"))==NULL)//如果指定檔案不存在則無法開啟,就新建
	{
		printf("not open");
		exit(0);//退出
	}
	for(i=0;i<count;i++)
	{
		fwrite(&data[i], sizeof(data[i]), 1, rs);
	}
	if(ferror(rs))//如果ferror返回值為0(假),表示未出錯。如果返回一個非零值,表示出錯
	{
		fclose(rs);//如果出錯就關閉檔案流
		perror("寫檔案失敗!\n");
		return;
	}
	printf("儲存檔案成功!\n");
	fclose(rs); //關閉檔案流
	Sleep(1000);
	system("CLS");

}
//匯出檔案

void DaoChu()
{
	struct data t;//定義一個結構體型別 t
	int i=0;
	FILE* fp = fopen("student.txt", "r");//fp指標指向所開啟的檔案
	count=0;
	if(fp==NULL)//如果開啟的檔案不存在就執行以下
	{
		perror("讀取檔案開啟失敗!\n");
		return;
	}
	memset(data,0x0,sizeof(data));//它把陣列的起始地址作為其第一個引數,第二個引數是設定陣列每個位元組的值,第三個引數是陣列的長度(位元組數,不是元素個數)

	while(1)//能開啟檔案就執行以下讀取資料
	{
		fread(&t,sizeof(t),1,fp);//如果有檔案的話,就依此讀取檔案&t表示首地址 t表示資料塊長度
		if(ferror(fp))//如果出錯就讀取失敗ferror
		{
			fclose(fp);
			perror("讀檔案過程失敗!\n");
			return;
		}
		if(feof(fp))//這判斷如果到達檔案尾部就應該停止
		{
			break;
		}
		data[i]=t;//把t的資料賦給i
		i++;//然後i以下加上
	}

	fclose(fp);//讀取完後關閉檔案流,否則會造成控制代碼洩露
	count=i;//然後把i的個數賦給全域性變數
	printf("匯出檔案成功!\n");

}
//修改函式
/*  工作原理
這個函式是先把資料匯出,然後再判斷輸入的學號是否一樣,找到一樣的就修改
然後再儲存進去!
*/
void revise()
{
	int m=0;
	int xuehao,xx,j,i;
	FILE *fp;
	int f=0;
	DaoChu();//呼叫匯出資料函式 
	printf("請輸入你要修改的學號:");
	scanf("%d",&xuehao);
	for(xx=0;xx<count;xx++)
	{
		if(xuehao==data[xx].id)
		{
			printf("找到該學生!可以修改\n");
			f=1;
			printf("請輸入學號:");
			scanf("%d",&data[xx].id);		
				for (i=0; i<xx; i++)//// 跟資料來源的資料比較,是否有一樣的學號
				{
					if( data[xx].id==data[i].id )/// 比較
					{
						printf("學號重複!請你重新輸入:\n");
						continue;
					}
				}
			printf("請輸入姓名:");
			scanf("%s",&data[xx].name);
			printf("輸入手機號:");
			scanf("%s",&data[xx].phone);
			printf("以下輸入成績\n");
			printf("語文:");
			scanf("%d",&data[xx].score[0]);
			printf("數學:");
			scanf("%d",&data[xx].score[1]);
			printf("英語:");
			scanf("%d",&data[xx].score[2]);
			printf("修改成功\n");	
			CunChu();
			break;
   	}	
	}
	if(!f)
	printf("沒有找到!\n");
}
//學生列表資訊
void list_all()
{

	int j;
	DaoChu();
	system("CLS");
	printf("    學號      姓名     手機號     英語  數學  語文    總分  \n");
	printf("------------------------------------------------------------\n");
	for(j=0;j<count;j++)
	{
		//STUDENT *s =&data[j];
		printf( " %-10d  %-6s  %-11s   %3d   %3d   %3d  ",data[j].id,data[j].name,data[j].phone,data[j].score[0],data[j].score[1],data[j].score[2]);
		data[j].score[3] =data[j].score[0]+data[j].score[1]+data[j].score[2];
		printf("   %3d  \n",data[j].score[3]);			
	}
	printf("------------------------------------------------------------\n");
	printf("總數:%d\n",count);
}
//選單功能
void mune()
{
	char cmdline[128];
	while(1)
	{

		printf("\n\n\t\t\t歡迎來到我的學生管理系統!\n");	   
		printf("\t\t\t\t新增:add \n\t\t\t\t查詢:find \n\t\t\t\t刪除:move \n\t\t\t\t瀏覽:list\n\t\t\t\t修改:revise\n\t\t\t\t儲存:input \n\t\t\t\t匯出:output  \n\t\t\t\t退出:exit \n");
		printf ("請輸入你的指令:");
		scanf("%s",cmdline);
		//選單處理
		if (strcmp(cmdline,"revise")==0)
		{
			revise();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"exit")==0)
		{
			printf("退出系統\n");
			break;
		}
		//選單處理
		if (strcmp(cmdline,"add")==0)
		{
			input();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"find")==0)
		{
			find();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"move")==0)
		{
			move();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"list")==0)
		{
			list_all();
			continue;
		}
		//選單處理
		if (strcmp(cmdline,"input")==0)
		{
			CunChu();
			continue;
		}

		if (strcmp(cmdline,"output")==0)
		{
			DaoChu();
			continue;
		}

		printf("輸入指令有誤,請重新輸入!\n");
	}
}

int main ()
{
	mune();	
	return 0;
}


作者水平有限:碼bug挺多的~歡迎大家參照修改!
c語言作業,伸手黨福利

如下侵權請聯絡作者!