C語言課設-班級成績統計分析
2014年9月3日 幫別人寫的 (王藝)
//定義標頭檔案 #include<stdio.h> #include<string.h> #include<stdlib.h> //巨集定義 #define MAX 18 #define MAXLIN 100 //一個學生的結構體儲存結構 typedef struct Stu{ //存資料用的 char num[MAX]; //學號 char name[MAX]; //姓名 char sex[MAX]; //性別 char banji[MAX]; //班級 char math[MAX]; //數學 char english[MAX]; //英語 char wuli[MAX]; //物理 }Stu; //一個班級的數學結構體 typedef struct ban{ int name; int math; int renshu; }ban; int counts=0; //全域性計數 //字串擷取函式 void substring(char *s,int i,int n,char *t) { int j=0; for(;j<n;j++) t[j]=s[i++]; t[j]=0; } //================================================================================================================================== //只是讀取 //================================================================================================================================== //初始化函式 讀取所有學生 void Init(Stu stu[MAXLIN]){ //這個函式只是讀取 別的函式呼叫了這個函式 counts=0; char str1[20]={"D:\\File04.txt"}; //讀取的檔名 FILE *fp; //檔案指標 char haha[35]={"NULL"}; //取資料結構陣列 char haha1[27]; //取具體數值陣列 if((fp=fopen(str1,"rt"))==NULL){ //開始讀取 printf("資料夾開啟失敗!\n"); exit(0); } fgets(haha,36,fp); //讀取資料結構 while(fgets(haha1,28,fp)!=NULL){ //迴圈讀取具體數值,並輸出 substring(haha1,0,3,stu[counts].num); //學號 substring(haha1,4,6,stu[counts].name); //姓名 substring(haha1,11,2,stu[counts].sex); //性別 substring(haha1,14,3,stu[counts].banji); //班級 substring(haha1,18,2,stu[counts].math); //數學 substring(haha1,21,2,stu[counts].english); //英語 substring(haha1,24,2,stu[counts].wuli); //物理 counts++; } fclose(fp); //關閉檔案 } //================================================================================================================================== //求所有班級 功能3 呼叫 //================================================================================================================================== //初始化班級 void InitBanji(Stu stu[MAXLIN],ban b[MAXLIN],int &p){ //實現功能2 int countban=0; //記錄一共多少條班級資料 有重複的班級 int a,bb,c; //字串轉為 數字 用到 Init(stu); //呼叫初始化函式,進行初始化 int countbanji[MAXLIN]; //儲存班級字串 for(int i=0;i<counts;i++){ //迴圈把 字串變為 整形 a=stu[i].banji[0]-'0'; //字串變為整形 -'0' bb=stu[i].banji[1]-'0'; c=stu[i].banji[2]-'0'; countbanji[countban++]=a*100+bb*10+c; //賦值成一個百位數 } //資料去重 並把資料輸出來 for(i=0;i<countban;i++){ for(int j=0;j<i;j++){ if(countbanji[i]==countbanji[j]){ break; } } if(i==j){ b[p++].name=countbanji[i]; } } } //================================================================================================================================== // 功能1 //================================================================================================================================== //讀入功能函式 這個是最開始寫的功能 和初始化有點重複 本可以呼叫初始化函式 但也沒問題 我懶得改了 void DuRu(Stu stu[MAXLIN]){ //對應的功能是1 int count=0; //計數 char str1[20]={"D:\\File04.txt"}; //讀取的檔名 FILE *fp; //檔案指標 char haha[35]={"NULL"}; //取資料結構陣列 char haha1[27]; //取具體數值陣列 if((fp=fopen(str1,"rt"))==NULL){ //開始讀取 printf("資料夾開啟失敗!\n"); exit(0); } fgets(haha,36,fp); //讀取資料結構 printf("%s\n",haha); //輸出資料結構 while(fgets(haha1,28,fp)!=NULL){ //迴圈讀取具體數值,並輸出 substring(haha1,0,3,stu[count].num); //學號 substring(haha1,4,6,stu[count].name); //姓名 substring(haha1,11,2,stu[count].sex); //性別 substring(haha1,14,3,stu[count].banji); //班級 substring(haha1,18,2,stu[count].math); //數學 substring(haha1,21,2,stu[count].english); //英語 substring(haha1,24,2,stu[count].wuli); //物理 printf("%s\t",stu[count].num); //輸出 printf("%s\t",stu[count].name); printf("%s\t",stu[count].sex); printf("%s\t",stu[count].banji); printf("%s\t",stu[count].math); printf("%s\t",stu[count].english); printf("%s\n",stu[count].wuli); count++; } printf("\n"); fclose(fp); //關閉檔案 printf("檔案%s輸出完畢",str1); //輸出完畢提示 printf("\n\n"); //換行 } //================================================================================================================================== //功能2 //================================================================================================================================== //確定班級函式 void BanJi(Stu stu[MAXLIN]){ int countban=0; //記錄一共多少條班級資料 有重複的班級 int a,b,c; //字串轉為 數字 用到 Init(stu); //呼叫初始化函式,進行初始化 int countbanji[MAXLIN]; //儲存班級字串 for(int i=0;i<counts;i++){ //迴圈把 字串變為 整形 a=stu[i].banji[0]-'0'; //字串變為整形 -'0' b=stu[i].banji[1]-'0'; c=stu[i].banji[2]-'0'; countbanji[countban++]=a*100+b*10+c; //賦值成一個百位數 } //資料去重 並把資料輸出來 printf("\n這些學生所屬的班級有:\n"); for(i=0;i<countban;i++){ for(int j=0;j<i;j++){ if(countbanji[i]==countbanji[j]){ break; } } if(i==j){ printf("%d\n",countbanji[i]); } } printf("所有班級輸出完畢!\n\n"); } //================================================================================================================================== //功能3 //================================================================================================================================== //計算數學平均成績函式 void Math(Stu stu[MAXLIN]){ int a,bb,c,m,n; ban b[MAXLIN]; int p=0; InitBanji(stu,b,p); //初始化班級資訊 for(int i=0;i<p;i++){ // printf("%d\n",b[i].name); b[i].math=0; b[i].renshu=0; } //計算求各班 對應的數學成績 與 人數 for(int j=0;j<counts;j++){ a=stu[j].math[0]-'0'; //數學成績 bb=stu[j].math[1]-'0'; m=a*10+bb; a=stu[j].banji[0]-'0'; //班級 bb=stu[j].banji[1]-'0'; c=stu[j].banji[2]-'0'; n=a*100+bb*10+c; for(i=0;i<p;i++){ //成績與人數匹配對應 班級 if(b[i].name==n){ b[i].math+=m; b[i].renshu++; break; } } } printf("\n各班數學平均成績如下\n"); //對各個班級數學成績進行輸出 for(int z=0;z<p;z++){ printf("班級:%d\t",b[z].name); printf("數學總分:%d\t",b[z].math); printf("班級人數:%d\t",b[z].renshu); printf("班級數學平均成績:%d\n",b[z].math/b[z].renshu); } printf("輸出完畢!\n\n"); } //================================================================================================================================== //退出函式 //================================================================================================================================== void TuiChu(){ printf("\n謝謝您的使用!\n"); //輸出友情話語 } //================================================================================================================================== //主函式 //================================================================================================================================== int main(){ int choice; //選擇 Stu stu[MAXLIN]; //結構體陣列 while(true){ //死迴圈,運算元不止一次 //輸出介面 printf("**********歡迎使用班級成績統計分析系統**********\n"); printf("----------讀入資料請輸入 1 --------------------\n"); printf("----------確定班級請輸入 2 --------------------\n"); printf("----------計算班級數學平均成績 請輸入 3 ------\n"); printf("----------退出請輸入 0 ------------------------\n"); printf("您的選擇是:"); //輸入要進行的操作選擇 scanf("%d",&choice); //異常處理 if(choice<0||choice>3){ printf("請輸入 0--3 之間的數!\n"); //接著輸入 continue; } //根據選擇進入相應的功能函式 switch(choice){ case 1: DuRu(stu); break; case 2: BanJi(stu); break; case 3: Math(stu); break; case 0: TuiChu(); exit(0); } } //返回0 return 0; }
執行程式截圖:
選擇1:
選擇2:
選擇3:
相關推薦
C語言課設-班級成績統計分析
2014年9月3日 幫別人寫的 (王藝) //定義標頭檔案 #include<stdio.h> #include<string.h> #include<stdlib.h> //巨集定義 #define MAX 18 #define M
C語言課設 投票管理系統
學生黨一枚,大二的時候,學校讓做C語言課程設計,我選了“投票管理系統”。C語言水的很,寫出來之後,自己感覺良好,答辯的時候罵的老慘,可成績卻是第一。[\dog][\dog][\dog] 文末見程式碼,有五個檔案,如圖。 第一個是儲存投票的磁碟檔案,防止系統關閉後資料丟
C語言課設——電影院選票系統
出錯 維數 介紹 txt 用戶名 位置 數據 交互性 表示 C語言課設——電影院選票系統 1.課題介紹 大家都愛看電影,現請參考一個熟悉電影票預訂系統,實現C語言版的訂票系統。了解訂票如何實現的。系統主要有2類用戶:管理員用戶和顧客用戶。 管理員用戶 1.電影放映廳信息管
C語言課設銷售管理系統設計
一. C程式設計課程設計題目簡介 該設計要求學生以某公司銷售管理業務為背景,設計、開發一套“銷售管理系統”軟體。 通過該題目的設計過程,可以培養學生結構化程式設計的思想,加深對高階語言基本語言要素和控制結構的理解,針對c語言中的重點和難點內容進行訓練,獨
《C語言例程系列》-- 統計平均成績
#include <stdio.h> #define NUM 10 int main() { int s[NUM]; int i,sum = 0; for(i = 0; i < NUM; i++) {
C語言進階——enum, sizeof, typedef 分析11
def 進階 new %d 計算 void var ray 枚舉類型 枚舉類型的使用方法: enum是C語言的 一種自定義類型 enum值是可以根據需要自定義的整型值 第一個enum的值默認為0 默認情況下的enum值是在前一個定義值的基礎上加 1 enum類型的變量
c語言 要求按照考試成績的等級輸出百分制分數段,成績的等級由鍵盤輸入
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【c語言】設圓半徑r = 1.5,圓柱高h = 3,求圓周長,圓面積,圓球表面積,圓球體積,圓柱體積
要求scanf輸入資料,並有相應文字說明 #include<stdio.h> int main() { float r,h,pi=3.141592 ; printf("請輸入圓半徑r和圓柱高h:"); scanf("%f%f",&r,&h); printf(
C語言函式呼叫過程的彙編分析
轉自: http://www.cnblogs.com/xiaojianliu/articles/8733560.html 下面一段C程式: int bar(int c, int d) { int e = c + d; return e; }
c語言課上作業——初學連結串列操作
http://www.cnblogs.com/maluning/p/7966875.html 根據上面的大佬的指導。今天完成了老師的作業。第一次完成了連結串列的建立、遍歷、插入、刪除(基本靠抄,不好意思)。 作為一個菜鳥,第一次完成100行以上的不用複製重複程式碼的程式碼。好興奮呀。 //不過還是有一點
C語言-字符串典型問題分析
++ hello mar lse inf sso size eof shift 1、典型問題一 下面的程序輸出什麽為什麽? 1 #include <stdio.h> 2 3 int main() 4 { 5 char buf
#C語言基礎知識歸納和例題分析(1)
## C語言基礎知識歸納和例題分析(1) 計算機程式和計算機語言 1.程式 就是一組計算機能識別和執行的指令 2.計算機語言經歷的幾個階段 機器語言(直接執行)→符號語言(又稱組合語言)→高階語言 3.高階語
C語言作業3-陣列-1統計文章各字元型別數目
C語言作業3-陣列-1統計文章各字元型別數目 問題描述: 有1篇文章,共有3行文字, 每行有80個字元,要求分別統計其中的英文大寫字母、小寫字母、數字、及其他字元的個數 程式碼實現: #include<stdio.h> #include<stdlib.h>
用c語言製作簡單的成績判斷系統
#incllude <stdio.h> #include <stdlib.h> int main() { int x; while(1){printf("輸入成績x:\n"); scanf("%d",&x); if(x
快速排序演算法(c語言演算法實現)-------精簡原理分析
“快速排序法”使用的是遞迴原理,下面我結合一個例子來說明“快速排序法”的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數--53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18
c語言 輸入一行字元,統計其中有多少個單詞,單詞之間用空格分隔開
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
c語言課程設計—學生成績管理系統
學生成績管理系統是比較適合初學者的。它涵蓋了c語言幾乎知識。對於學了c語言的人,把這個課程設計搞好(當然自己能設計出來是要有很好的基礎)。不管自己能不能夠完成,最重要的是能弄懂。參考其他資料,試著自己編寫是不錯的選擇。這個課程設計也是我參照資料,自己編寫的。自己適當地增加了
C語言:輸入一行字串統計出英文字母,空格,數字和其他字元的個數
題目要求 輸入一行字串統計出英文字母,空格,數字和其他字元的個數。 程式分析 要統計英文字母,空格,數字和其他字元的個數,則要遇到他們加一。 核心程式碼如下: while ((c=getchar())!='\n') { if ((c >= 'a' &
c語言連結串列-學生成績管理系統
大學時候用連結串列寫的成績管理系統,可實現增刪查改的功能,程式碼如下 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> #d
SQL成績統計分析—排名問題
select * from studentScore select ROW_NUMBER() over (order by studentScore desc,id desc) number,* from studentScore 下面介紹下在SQL成績統計分析中遇到的