1. 程式人生 > >(c語言課程設計)學生成績管理系統

(c語言課程設計)學生成績管理系統

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<string.h>
#include<algorithm>
char buf[255];
char c=14;
char path[]="D:\\data";
char tmp[]="D:\\tmp";
struct Student
{
	char Name[20];
	char No[20];
	char Dept[20];
	char ClassNo[20];
	double Math,Chinese,English;
	double Ave;
	bool Pass;
}students[500];
bool cmp1(Student s1,Student s2)
{
	return s1.Chinese>s2.Chinese;
}
bool cmp2(Student s1,Student s2)
{
	return s1.Math>s2.Math;
}
bool cmp3(Student s1,Student s2)
{
	return s1.English>s2.English;
}
bool cmp4(Student s1,Student s2)
{
	return s1.Ave>s2.Ave;
}
//---------------------------------------------------------void Sort(int cmd)
/*
1 ChineseSort
2 MathSort
3 EnglishSort
4 AveSort
*/
int Sort(int cmd)
{
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=0;
	while((n=fread(&stu,sizeof(stu),1,fp)>0))
	{
		students[cnt++]=stu;
	}
	fclose(fp);
	switch(cmd)
	{
	case 1:
	std::sort(students,students+cnt,cmp1);
		break;
	case 2:
	std::sort(students,students+cnt,cmp2);
		break;
	case 3:
	std::sort(students,students+cnt,cmp3);
		break;
	case 4:
	std::sort(students,students+cnt,cmp4);
		break;
	default:
		exit(0);
	}
	return cnt;
}
//---------------------------------------------------------PrintTitle()
void PrintTitle()
{
	printf("%-8s%-12s%-12s%-8s%-7s%-7s%-7s%-7s%-s\n","姓名","班級","學號","系院","語文","數學","英語","平均分","及格");
}
//---------------------------------------------------------Print(Student stu)
void Print(Student stu)
{
	printf("%-8s%-12s%-12s%-8s%-7.2lf%-7.2lf%-7.2lf%-7.2lf%-s\n",stu.Name,stu.ClassNo,stu.No,stu.Dept,stu.Chinese,stu.Math,stu.English,stu.Ave,stu.Pass?"是":"否");
}
//---------------------------------------------------------PrintNo(char No[])
void PrintNo(char No[])
{
	Student stu;
	int n;
	bool find=0;
	FILE *fp=fopen(path,"ab+");//以ab+方式開啟防止data檔案不存在時發生錯誤
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{
		if(!strcmp(stu.No,No))
		{
			find=1;
			break;
		}
	}
	fclose(fp);
	if(find)
	{
		PrintTitle();
		Print(stu);
	}
	else
		puts("未找到!");
}
//---------------------------------------------------------PrintClass(char ClassNo[])
void PrintClass(char ClassNo[])
{
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=0;
	while((n=fread(&stu,sizeof(stu),1,fp)>0))
	{
		if(!strcmp(stu.ClassNo,ClassNo))
		{
			if(cnt==0)
				PrintTitle();
			Print(stu);
			cnt++;
		}
	}
	fclose(fp);
	if(cnt==0)
		puts("無資料");
	else
		printf("共%d條\n",cnt);
}
//---------------------------------------------------------PrintDept(char Dept[])
void PrintDept(char Dept[])
{
		Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=0;
	while((n=fread(&stu,sizeof(stu),1,fp)>0))
	{
		if(!strcmp(stu.Dept,Dept))
		{
			if(cnt==0)
				PrintTitle();
			Print(stu);
			cnt++;
		}
	}
	fclose(fp);
	if(cnt==0)
		puts("無資料");
	else
		printf("共%d條\n",cnt);
}
//---------------------------------------------------------PrintAll()
void PrintAll()
{
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=0;
	while((n=fread(&stu,sizeof(stu),1,fp)>0))
	{
		if(cnt==0)
			PrintTitle();
		Print(stu);
		cnt++;
	}
	fclose(fp);
	if(cnt==0)
		puts("無資料");
	else
		printf("共%d條\n",cnt);
}
//---------------------------------------------------------Input()
Student Input()
{
	Student stu;
	puts("請輸入姓名、班級、學號、系院:");
	scanf("%s%s%s%s",&stu.Name,&stu.ClassNo,&stu.No,&stu.Dept);
	puts("請輸入各科成績:語文、數學、英語");
	scanf("%lf%lf%lf",&stu.Chinese,&stu.Math,&stu.English);
	stu.Ave=(stu.Chinese+stu.Math+stu.English)/3;
	if(stu.Chinese>=60&&stu.Math>=60&&stu.English>=60)
		stu.Pass=1;
	else
		stu.Pass=0;
	return stu;
}
//---------------------------------------------------------Insert()
void Insert()
{
	int cmd;
	do{
		Student stu=Input();
		FILE *fp=fopen(path,"ab+");
		fwrite(&stu,sizeof(stu),1,fp);
		fclose(fp);
		puts("錄入成功");
		puts("繼續錄入嗎?[1]是[0]否");
		scanf("%d",&cmd);
	}while(cmd==1);
}
//---------------------------------------------------------Del()
void Del()
{
	int cmd,cmd2;
	char No[20];
	do{
	puts("請輸入要刪除的學號:");
	scanf("%s",&No);
	Student stu;
	FILE *fp=fopen(path,"ab+");
	FILE *fp2=fopen(tmp,"wb");
	int n,find=0;
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{
		if(!strcmp(stu.No,No))
		{
			find=1;
			Print(stu);
			puts("確定要刪除嗎?[1]確定[0]取消");
			scanf("%d",&cmd2);
			if(cmd2==1)
				puts("已刪除");
			else
				fwrite(&stu,sizeof(stu),1,fp2);
		}
		else
		fwrite(&stu,sizeof(stu),1,fp2);
	}
	fclose(fp);
	fclose(fp2);
	if(find==0)
	{
		printf("未找到學號%s\n",No);
		remove(tmp);
	}
	else
	{
		remove(path);
		rename(tmp,path);
	}
	puts("繼續刪除嗎?[1]是[0]否");
	scanf("%d",&cmd);
	}while(cmd==1);
}
//---------------------------------------------------------Change()
void Change()
{	
	int cmd;
	char No[20];
	do{
	puts("請輸入要更改的學號:");
	scanf("%s",&No);
	Student stu;
	int find=0;
	FILE *fp=fopen(path,"ab+");
	FILE *fp2=fopen(tmp,"wb");
	int n;
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{
		if(!strcmp(stu.No,No))
		{
			find=1;
			stu=Input();
			fwrite(&stu,sizeof(stu),1,fp2);
		}
		else
			fwrite(&stu,sizeof(stu),1,fp2);
	}
	fclose(fp);
	fclose(fp2);
	if(find)
	{
		remove(path);
		rename(tmp,path);
		puts("更改成功!");
	}
	else
	{
		printf("未找到學號%s\n",No);
		remove(tmp);
	}
	puts("繼續更改嗎?[1]是[0]否");
	scanf("%d",&cmd);
	}while(cmd==1);
}
//---------------------------------------------------------AboutCourse
void Chinese()
{
	double sum=0,ave;
	int pass=0,fail=0,better=0;
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=Sort(1);
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{
		sum+=stu.Chinese;
		if(stu.Chinese>=60)
			{
				pass++;
				if(stu.Chinese>=80)
					better++;
			}
		else
			fail++;
	}
	ave=sum/cnt;
	puts("語文成績分析……");
	printf("共有%d學生\n優秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
	printf("%-8s%-10s%-12s%-s\n","名次","姓名","學號","語文");
	for(int i=0;i<cnt;i++)
	{
		printf("第%2d名  %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Chinese);
	}
	printf("平均分:%.2lf\n",ave);
}
void Math()
{
	double sum=0,ave;
	int pass=0,fail=0,better=0;
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=Sort(2);
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{
		sum+=stu.Math;
		if(stu.Math>=60)
			{
				pass++;
				if(stu.Math>=80)
					better++;
			}
		else
			fail++;
	}
	ave=sum/cnt;
	puts("數學成績分析……");
	printf("共有%d學生\n優秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
	printf("%-8s%-10s%-12s%-s\n","名次","姓名","學號","數學");
	for(int i=0;i<cnt;i++)
	{
		printf("第%2d名  %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Math);
	}
	printf("平均分:%.2lf\n",ave);
}
void English()
{
	double sum=0,ave;
	int pass=0,fail=0,better=0;
	Student stu;
	FILE *fp=fopen(path,"ab+");
	int n,cnt=Sort(3);
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{	
		sum+=stu.English;
		if(stu.English>=60)
			{
				pass++;
				if(stu.English>=80)
					better++;
			}
		else
			fail++;
	}
	ave=sum/cnt;
	puts("英語成績分析……");
	printf("共有%d學生\n優秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
	printf("%-8s%-10s%-12s%-s\n","名次","姓名","學號","英語");
	for(int i=0;i<cnt;i++)
	{
		printf("第%2d名  %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].English);
	}
	printf("平均分:%.2lf\n",ave);
}
void Average()
{
	Student stu;
	int n,cnt=Sort(4);
	double sum=0;
	FILE *fp=fopen(path,"ab+");
	while((n=fread(&stu,sizeof(stu),1,fp))>0)
	{	
		sum+=stu.Chinese;
		sum+=stu.Math;
		sum+=stu.English;
	}
	puts("平均成績分析……");
	printf("%-8s%-10s%-12s%-s\n","名次","姓名","學號","平均成績");
	for(int i=0;i<cnt;i++)
	{
		printf("第%2d名  %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Ave);
	}
	printf("平均分:%.2lf\n",sum/cnt/3);
}
//---------------------------------------------------------Search()
void Search()
{
	int cmd,cmd2;
	while(1)
	{
		system("cls");
		puts("[1] 按學號查詢");
		puts("[2] 按班級查詢");
		puts("[3] 輸出全部");
		puts("[4] 按系別查詢");
		puts("[5] 課程分析");
		puts("[0] 返回主介面");
		scanf("%d",&cmd);
		if(cmd==0)
			break;
		switch(cmd)
		{
		case 1:
			{
			char No[20];
			puts("請輸入要查詢的學號:");
			scanf("%s",&No);
			PrintNo(No);
			}
			break;
		case 2:
			{
				char ClassNo[20];
				puts("請輸入要查詢班級號:");
				scanf("%s",&ClassNo);
				PrintClass(ClassNo);
			}
			break;
		case 3:
			PrintAll();
			break;
		case 4:
			{
				char Dept[20];
				puts("請輸入要查詢的系別:");
				scanf("%s",&Dept);
				PrintDept(Dept);
			}
			break;
		case 5:
			while(1)
			{
				puts("[1] 語文成績分析");
				puts("[2] 數學成績分析");
				puts("[3] 英語成績分析");
				puts("[4] 平均成績分析");
				puts("[0] 返回上一級");
				scanf("%d",&cmd2);
				if(cmd2==0)
					break;
				switch(cmd2)
				{
				case 1:
					Chinese();
					break;
				case 2:
					Math();
					break;
				case 3:
					English();
					break;
				case 4:
					Average();
					break;
				default:
					puts("不合法指令!");
				}
			}
			break;
		default:
			puts("不合法指令!");
		}
		while(1)
		{
			puts("[0] 返回");
			puts("[1] 錄入");
			puts("[2] 刪除");
			puts("[3] 修改");
			scanf("%d",&cmd2);
			if(cmd2==0)
				break;
			switch(cmd2)
			{
			case 1:
				Insert();
					break;
			case 2:
				Del();
				break;
			case 3:
				Change();
				break;
			default:
				puts("不合法指令!");
			}
		}
	}
}
//---------------------------------------------------------Menu()
void ShowMenu1()
{	
	int i;
	puts("");
	printf("                 ");
	for(i=0;i<14;i++)
		putchar(c);
	printf("成績管理分析系統");
	for(i=0;i<14;i++)
		putchar(c);
	puts("");
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                請輸入指令                %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                [0] 退出                  %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                [1] 錄入                  %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                [2] 刪除                  %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                [3] 查詢                  %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 %c                [4] 更改                  %c\n",c,c);
	printf("               %c                                              %c\n",c,c);
	printf("                 ");
	for(i=0;i<44;i++)
		putchar(c);
	puts("");
}
void ShowMenu2()
{	
	int i;
	puts("");
	printf("                 ");
	for(i=0;i<14;i++)
		putchar(c);
	printf("成績管理分析系統");
	for(i=0;i<14;i++)
		putchar(c);
	puts("");
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  請輸入指令                  %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  [0] 退出                    %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  [1] 錄入                    %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  [2] 刪除                    %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  [3] 查詢                    %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("               %c                  [4] 更改                    %c\n",c,c);
	printf("                 %c                                          %c\n",c,c);
	printf("                 ");
	for(i=0;i<44;i++)
		putchar(c);
	puts("");
}
//---------------------------------------------------------void RandColor()
void RandColor()
{
	int a,b;
	char param[20]="color ",param2[10];
	do{
		a=rand()%16;
		b=rand()%16;
	}while(a==b);
	sprintf(param2,"%x%x",a,b);
	strcat(param,param2);
	system(param);
}
//---------------------------------------------------------main()
int main()
{
	int cmd;
	srand(time(NULL));
	for(int i=0;i<8;i++)
	{
	RandColor();
	system("cls");
	ShowMenu1();
	system("cls");
	ShowMenu2();
	}
	system("color 0a");
	while(1)
	{
		system("cls");
		ShowMenu1();
		printf("[ ]\b\b");
		scanf("%d",&cmd);
		if(cmd==0)
			break;
		switch(cmd)
		{
		case 1:
			Insert();
			break;
		case 2:
			Del();
			break;
		case 3:
			Search();
			break;
		case 4:
			Change();
			break;
		default:
			puts("命令不合法!");
		}
	}
	return 0;
}

相關推薦

c語言課程設計學生成績管理系統

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algo

大一c語言課程設計原始碼——學生成績管理系統,鍵盤移動

部落格目錄 學生成績管理系統 ---------------------------->>>>>>>>>>>>>資源傳送門<<<<<<<<----

C語言課程設計學生資訊管理系統

#include"stdio.h" //標準的輸入輸出函式檔案頭部說明 #include"math.h" // 數學函式頭部說明 #include"string.h" #include"stdlib.h" //通過該函式頭部裡的

JAVA語言 實現簡單的學生成績管理系統總分+平均分+排名

import java.util.*;public class test14{public static void main(String[] args){Scanner in =new Scanner(System.in);System.out.println("輸入學生人

資料結構課程設計學生資訊管理系統煙大版

/* * Copyright (c) 2016, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:student.project * 作者:李瀟 * 完成日期:2016年12月28日 * 版本號:DEVC+

資料結構程式設計回顧.學生成績管理系統-冒泡、快排、希爾、雙向冒泡和堆排

題目六:學生成績處理系統 設計要求:本設計要求採用順序儲存結構,實現關於學生成 績處理的相關問題,包括:學生資訊的錄入、查詢、修改、 排序、確定名次以及資訊的輸出。其中學生資訊包括:學號、 姓名、四門課、總分以及排名;排序方法包括:雙向冒泡排 序、希爾排序、快速排序、堆排序等方法。 選單內容:

C++課程設計學生資訊管理系統

課程設計內容 1.)學生資訊的錄入:錄入新的學生的資訊; 2.)學生資訊的新增:新增新的學生的資訊; 3.) 學生資訊的刪除:刪除不需要的學生的資訊。 4.)學生資訊的查詢:查詢你需要的學生的資訊。 5.)學生資訊的修改:修改錯誤的學生的資訊。 6.)學生資訊的顯示:顯示所

課程設計學生檔案管理系統

 一、       程式設計的題目     ——學生檔案管理系統     二、         程

linux下使用C語言實現簡易的學生資訊管理系統

該專案資料儲存方式使用的是動態陣列,所以需要用到動態陣列庫,具體庫檔案參考->我的動態陣列庫<-上的兩個檔案 ArrayLib.h 和 ArrayLib.c 學生管理系統的檔案有三個 main.c、stuSystem.h 和 stuSystem.c,

【qduoj - 夏季學期創新題】C語言課程設計-階梯問題dp,高精度大數

題幹: 描述   N級階梯,人可以一步走一級,也可以一步走兩級,求人從階梯底端走到頂端可以有多少種不同的走法。 輸入   一個整數n,代表臺階的階數。 輸出   求人從階梯底端走到頂端可以有多少種不同的走法,輸出結果的格式為大整數

c語言學生成績管理系統可以將學生資訊儲存至txt檔案中

程式截圖:  標頭檔案說明; 定義全域性變數;   定義、編寫輸入函式; 定義、編寫顯示函式; 定義、編寫修改函式; 定義、編寫查詢函式; 定義、編寫新增函式; 定義、編寫排序函式; 定義、編寫刪除函式; 定義、編

學生成績管理系統C語言實現

        今天,我來介紹一個C語言的小專案 --- 學生成績管理系統。在該系統中,主要是完成對學生資訊的錄入,新增,刪除,修改,查詢以及按照要求完成學生資訊的排序,此外還包括系統的初始化和清空。        整個專案包括三個檔案main.c  ,   Sort.

學生成績管理系統資料結構課程設計

學生成績管理問題  問題描述:建立兩個學生成績資訊表1、2,以檔案的形式分別進行儲存命名為1.txt和2.txt,然後實現將兩個檔案合併成一個新的檔案3.txt。 新檔案中有補考的學生查詢到,儲存到另一個檔案4.txt中。     基本要求:    

c語言課程設計學生成績管理系統

學生成績管理系統是比較適合初學者的。它涵蓋了c語言幾乎知識。對於學了c語言的人,把這個課程設計搞好(當然自己能設計出來是要有很好的基礎)。不管自己能不能夠完成,最重要的是能弄懂。參考其他資料,試著自己編寫是不錯的選擇。這個課程設計也是我參照資料,自己編寫的。自己適當地增加了

C語言課程設計——簡易公交車管理系統陣列實現

/**************************標頭檔案宣告************************************/ #include "stdio.h" #include "stdlib.h" #include "string.h" #includ

學生成績管理系統C語言

//////////////////////////////////////////////////////////////// 工程名稱:學生成績管理系統// 工程檔案:C語言課程設計// 作 者:張誠華// 日期:2016-06-18//////////////////

c++的復制構造函數,鄭莉 c++語言程序設計

三次 返回值 參數 .html article 構造 局部變量 class html 1. https://www.cnblogs.com/BlueTzar/articles/1223313.html 以上博客講了深拷貝和淺拷貝的區別,即: 在某些狀況下,類內成員變量需要動

漢諾塔的故事C語言——遞歸

code log 圓盤 印度 return 16px move class baidu 漢諾塔:   漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤

資料結構---棧C語言陣列實現

https://blog.csdn.net/morixinguan/article/details/51374184 資料結構---棧(C語言陣列實現)   棧的全名稱為堆疊,棧其實就是與佇列相反的過程,佇列是先進先出,而棧便是先進後出了,如下圖:  

資料結構---佇列C語言陣列實現

https://blog.csdn.net/morixinguan/article/details/51374296 資料結構---佇列(C語言陣列實現)   佇列是先進先出的過程。簡單地畫一幅畫來描述一下佇列: 一個簡單的、由陣列實現的佇列,可以由以下幾種最基本的操