C語言實戰——學生管理系統

C語言實戰

學生管理系統

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

struct Stu
{
	char name[32];
	char num[24];
	int grade;
};


int main()
{
	int max = 0,min;
	int sum = 0;
	int t;
	float ave = 0;
	char a[30];
	printf("請輸入文件名\n");
	scanf("%s",a);
	strcat(a,".csv");
	
	
	int n;
	printf("請輸入學生人數\n");
	scanf("%d",&n);
	struct Stu str[n];
	min = n-1;
	
	
	FILE *pFile = fopen(a,"w");
	printf("使用方法:同一行的不同數據之間使用空格來隔開\n下一行使用回車鍵來換行\n");
	printf("請輸入數據 (姓名 學號 成績)\n");
	
	system("pause");
	system("cls");
	
	
	int i;
	for(i = 0 ; i < n ; i++)
	{
		fflush(stdin);
		scanf("%s %s %d",&str[i].name,&str[i].num,&str[i].grade);
		sum+=str[i].grade;
	}
	ave = (float)sum/(float)n;
	
	
	
	for(i = 0 ; i < n ; i++)
	{
		if(str[max].grade < str[i].grade)
		{
			max = i;
		}
		
		if(str[min].grade > str[i].grade)
		{
			min = i;
		}
	}
	
	
	fprintf(pFile, "姓名,學號,成績\n");
	for(i = 0 ; i < n ; i++)
	{
		fprintf(pFile,"%s,'%s,%d\n",str[i].name,str[i].num,str[i].grade);	
	} 
	fputs("\n",pFile);
	fprintf(pFile,",,average=%.2f\n",ave);
	fprintf(pFile,"%s,'%s,%d\n",str[max].name,str[max].num,str[max].grade);
	fprintf(pFile,"%s,'%s,%d\n",str[min].name,str[min].num,str[min].grade);
	
	
	char* buffer = getcwd(NULL,0);
	printf("輸入成功,請查看文件,保存目錄爲:%s\\%s",buffer,a);
	fclose(pFile);
	system("pause");
	return 0;
} 
  • 這是一個比較簡單的使用文件操作來進行csv文件的讀寫程序。下面介紹知識點:
  1. 結構體數組,使用了一個數組來裝每個學生的信息,這也是很多c語言程序中都有的一個技巧。
  2. 文件名拼接,使用了strcat函數,在輸入的文件名後面拼接上後綴,確保我們創建的是既能使用EXCEL打開,又能被c語言寫入的csv文件
  3. 還是要注意fopen的第二個參數,如果是要在上一個程序中寫入沒寫完的數據,應使用"a"
  4. 使用了暫停,和清屏指令,提高程序可執行性。
  5. 使用fprintf時,一定要注意在數據之間,使用英文輸入法下的逗號,隔開,這樣在csv裏面會自動當成本行中的下一列,換行要使用\n
  6. 在最後使用了函數getcwd,其作用是返回當前操作位置的路徑的地址,所以使用指針變量取裝,該函數的參數意義不大,所以我們直接分別寫NULL,0即可。
  7. 最後一定不要忘記fclose函數,有打開一定有關閉。
  8. 在最後還要加上system("pause");指令,防止程序在scanf進行完之後直接閃退,不要養成dev帶來的壞習慣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章