用C語言編制查詢某班同學的平均成績
用C語言編制查詢某班同學的平均成績
1.實驗目的與要求
⑴ 掌握用C語言編寫查詢統計程式。
⑵ 掌握C語言的檔案讀寫的基本操作。
2.實驗內容
⑴ 建立一個文字檔案,含有若干班級的資料,要求其資料每個班級至少有50位同學,每位同學至少學習10門課程(要考慮各班級中的不同人數以及學習的課程門數不同)
⑵ 寫出函式求出某一位的平均成績
⑶ 寫出函式求出每一位的平均成績
⑷ 使用檔案讀入相關資料,將執行結果送到檔案中
3.實驗準備
- 首先應明確建立文字檔案的格式,資料協議等。
- 其次根據檔案讀取資料,並將結果送入結構檔案中。
- 參閱C語言教材中的有關內容。
4.實驗方法
⑴ 用建立文字檔案的格式建立資料。
⑵ 編制相應功能函式。
⑶ 讀取檔案的資料(注意可能有不同的個數的資料)。
⑷ 整合相關函式構成完整的應用程式。
⑸ 輸出結果送入檔案中。
程式碼程式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
typedef struct student{
char classes[15];
int no;
char name[32];
char scores[100];
} stu;
typedef struct course{
int no;
char name[32];
double score;
} cur;
void split(char *src,const char *separator,char **dest,int *num) {
/*
src 源字串的首地址(buf的地址)
separator 指定的分割字元
dest 接收子字串的陣列
num 分割後子字串的個數
*/
char *pNext;
int count = 0;
if (src == NULL || strlen(src) == 0) //如果傳入的地址為空或長度為0,直接終止
return;
if (separator == NULL || strlen(separator) == 0) //如未指定分割的字串,直接終止
return;
pNext = (char *)strtok(src,separator); //必須使用(char *)進行強制型別轉換(雖然不寫有的編譯器中不會出現指標錯誤)
while(pNext != NULL) {
*dest++ = pNext;
++count;
pNext = (char *)strtok(NULL,separator); //必須使用(char *)進行強制型別轉換
}
*num = count;
}
void getoneavgscore(char name[],stu stu1[100],cur cur2[1000]);
void getallavgscore(stu stu1[100],cur cur2[1000]);
int getsumstu();
int main(int argc, char* argv[])
{
//開啟檔案
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
//讀寫檔案
//int sumstu = getsumstu();
//printf("共有%d條資料\n",sumstu);
stu a[100];
cur b[1000];
//cur b[128];
int i=0;
//!feof(pf)
printf("資料讀取中.....................\n");
while(fscanf(r,"%s%d%s%s",a[i].classes,&a[i].no,a[i].name,a[i].scores)!=EOF)
{
printf("%s\t%d\t%s\t%s\n",a[i].classes,&a[i].no,a[i].name,a[i].scores);
i++;
}
//關閉檔案
fclose(r);
int p = 0;
for(int j = 0 ;j < i; j++)
{
char *revbuf[20] = {0}; //存放分割後的子字串
// printf("%s\n ",a[j].scores);
//分割後子字串的個數
int num = 0;
split(a[j].scores,",",revbuf,&num); //呼叫函式進行分割
//輸出返回的每個內容
for(int k = 0;k < num; k ++) {
//printf("%s\n",revbuf[k]);
char *revbuf2[20] = {0}; //存放分割後的子字串
int num2 = 0;
split(revbuf[k],":",revbuf2,&num2); //呼叫函式進行分割
strcpy(b[p].name,revbuf2[0]);
b[p].no = a[j].no;
b[p].score =atof(revbuf2[1]);
// printf("%s\n",revbuf2[1]);
p++;
}
}
printf("..................資料讀取完成\n");
int choice;//選擇序號
char answer;
do
{
printf("歡迎你使用!\n");
printf("|---------------------------------------|\n");
printf("|\t請輸入選項編號(0-2):\t\t|");
printf("\n|---------------------------------------|\n");
printf("|\t1--查詢某一位的平均成績:\t\t|\n");
printf("|\t2--查詢每一位的平均成績:\t\t|\n");
printf("|\t0--退出系統:\t\t\t|\n");
printf("|---------------------------------------|\n");
printf("請輸入選項:");
scanf("%d",&choice);
switch(choice)
{
case 0:
{
printf("********退出系統*********\n");
printf("歡迎下次使用\n");
exit(0);
break;
}
case 1:
{
printf("請選擇查詢方式\n");
printf("1.姓名\n2.學號\n");
scanf("%s",&answer);
if( answer == '1' )
{
char name[10];
printf("請輸入姓名:");
scanf("%s",&name);
getoneavgscore(name,a,b);
}
if(answer == '2' )
{
int no;
printf("請輸入學號:");
scanf("%d",&no);
for(int q = 0;q<100;q++){
if(a[q].no==no){
getoneavgscore(a[q].name,a,b);
}
}
}
if(answer != '1' && answer!= '2')
{
printf("輸入錯誤\n");
}
printf("1.按任意鍵回車後繼續查詢\n0.退出\n");
scanf("%s",&answer);
fflush(stdin);
if(answer == '0' )
{
break;
}
}
case 2:
{
getallavgscore(a,b);
break;
}
default:
{
printf("********沒有這個選項*********\n按任意鍵重新輸入\n");
break;
}
}
}while(1);
system("pause");
return 0;
}
//根據學生姓名查成績
void getoneavgscore(char name[32],stu stu1[100],cur cur2[1000])
{
int no1;
for(int q = 0;q<100;q++){
if(strcmp(stu1[q].name, name)==0){
no1 = q;
}
}
printf("\t\t\t學生資訊\n\t\t學號:%d\t班級:%s\t姓名:%s\t\n",stu1[no1].no,stu1[no1].classes,stu1[no1].name);
printf("*******************************************************\n");
printf("\t\t\t\t成績資訊\n");
printf("\t\t課程名\t\t\t成績\n");
double sum = 0;
int count = 0;
for(int p = 0;p<1000;p++){
if(cur2[p].no==stu1[no1].no){
count++;
sum = sum+cur2[p].score;
printf("\t\t%s",cur2[p].name);
printf("\t\t\t%3.1f",cur2[p].score);
printf("\n");
}
}
printf("*******************************************************\n");
printf("\t\t課程數:%d\t總成績:%3.1f\t平均成績:%3.1f\n",count,sum,sum/count);
}
//查詢每一位的平均成績
void getallavgscore(stu stu1[100],cur cur1[1000])
{
FILE * w=fopen("B.txt","w");
assert(w!=NULL);
printf("*******************************************************\n");
printf("\t學號\t姓名\t課程數\t總分\t平均分\n");
fprintf(w,"\t學號\t姓名\t課程數\t總分\t平均分\n");
for(int q = 0;q<100;q++){
double sum = 0;
int count = 0;
for(int s = 0;s<1000;s++){
if(stu1[q].no == cur1[s].no){
count++;
sum = sum+cur1[s].score;
}
}
printf("\t%d\t%s\t%d\t%3.1f\t%3.1f\n",stu1[q].no,stu1[q].name,count,sum,sum/count);
fprintf(w,"\t%d\t%s\t%d\t%3.1f\t%3.1f\n",stu1[q].no,stu1[q].name,count,sum,sum/count);
}
fclose(w);
}
/*int getsumstu(){
FILE * r1=fopen("A.txt","r");
assert(r1!=NULL);
int i=0;
char temp[255];
while(fscanf(r1,"%s",temp)!=EOF)
{
i++;
}
return i/4;
}*/
資料檔案(命名為A.txt)
1班 1001 王51 數學:51,英語:54,語文:89,地理:26,政治:52,生物:31,物理:61,歷史:65,體育:84,美術:21,計算機:51
1班 1002 王52 數學:34,英語:57,語文:99,地理:69,政治:29,生物:82,物理:75,歷史:73,體育:70,美術:90,
1班 1003 王53 數學:51,英語:75,語文:32,地理:77,政治:32,生物:42,物理:97,歷史:49,體育:64,美術:59,
1班 1004 王54 數學:46,英語:57,語文:50,地理:38,政治:27,生物:33,物理:91,歷史:35,體育:90,
1班 1005 王55 數學:47,英語:97,語文:39,地理:97,政治:57,生物:71,物理:50,歷史:48,體育:95,美術:57,計算機:90
1班 1006 王56 數學:35,英語:77,語文:81,地理:55,政治:23,生物:22,物理:75,歷史:83,體育:51,美術:46,
1班 1007 王57 數學:71,英語:90,語文:92,地理:92,政治:53,生物:51,物理:52,歷史:80,體育:20,美術:54,
1班 1008 王58 數學:47,英語:40,語文:32,地理:31,政治:67,生物:26,物理:52,歷史:35,體育:56,美術:38,
1班 1009 王59 數學:56,英語:90,語文:71,地理:72,政治:87,生物:25,物理:31,歷史:62,體育:49,美術:44,
1班 1010 王60 數學:35,英語:54,語文:71,地理:40,政治:40,生物:47,物理:95,歷史:29,體育:64,
1班 1011 王61 數學:27,英語:24,語文:25,地理:27,政治:28,生物:93,物理:40,歷史:82,體育:56,美術:35,
1班 1012 王62 數學:89,英語:20,語文:69,地理:97,政治:93,生物:36,物理:42,歷史:21,體育:95,美術:53,
1班 1013 王63 數學:26,英語:35,語文:90,地理:41,政治:60,生物:33,物理:90,歷史:28,體育:87,美術:22,
1班 1014 王64 數學:36,英語:83,語文:45,地理:55,政治:86,生物:95,物理:26,歷史:30,體育:48,美術:90,
1班 1015 王65 數學:67,英語:40,語文:91,地理:53,政治:81,生物:78,物理:20,歷史:84,體育:24,美術:37,
1班 1016 王66 數學:51,英語:36,語文:80,地理:29,政治:67,生物:59,物理:57,歷史:76,體育:61,美術:67,
1班 1017 王67 數學:47,英語:33,語文:51,地理:92,政治:28,生物:59,物理:55,歷史:87,體育:52,美術:25,計算機:90
1班 1018 王68 數學:44,英語:46,語文:70,地理:95,政治:35,生物:36,物理:43,歷史:39,體育:83,美術:35,
1班 1019 王69 數學:46,英語:89,語文:64,地理:71,政治:51,生物:63,物理:85,歷史:28,體育:96,
1班 1020 王70 數學:79,英語:26,語文:49,地理:91,政治:40,生物:86,物理:98,歷史:68,體育:28,美術:78,
1班 1021 王71 數學:25,英語:70,語文:31,地理:91,政治:58,生物:62,物理:58,歷史:83,體育:70,美術:67,
1班 1022 王72 數學:29,英語:38,語文:46,地理:63,政治:95,生物:54,物理:59,歷史:72,體育:90,美術:51,
1班 1023 王73 數學:56,英語:87,語文:39,地理:46,政治:63,生物:97,物理:27,歷史:82,體育:60,美術:57,
1班 1024 王74 數學:84,英語:79,語文:46,地理:33,政治:91,生物:65,物理:30,歷史:48,體育:82,美術:83,
1班 1025 王75 數學:98,英語:53,語文:30,地理:100,政治:26,生物:93,物理:98,歷史:64,體育:90,美術:26,計算機:90
1班 1026 王76 數學:24,英語:21,語文:79,地理:46,政治:89,生物:57,物理:79,歷史:49,體育:97,
1班 1027 王77 數學:57,英語:80,語文:43,地理:79,政治:56,生物:50,物理:43,歷史:45,體育:69,美術:93,
1班 1028 王78 數學:43,英語:40,語文:50,地理:31,政治:26,生物:42,物理:25,歷史:32,體育:99,美術:25,
1班 1029 王79 數學:74,英語:94,語文:42,地理:58,政治:82,生物:26,物理:64,歷史:61,體育:38,美術:72,
1班 1030 王80 數學:67,英語:58,語文:31,地理:74,政治:51,生物:69,物理:90,歷史:43,體育:90,美術:42,
1班 1031 王81 數學:25,英語:21,語文:74,地理:22,政治:83,生物:86,物理:52,歷史:49,體育:84,美術:94,
1班 1032 王82 數學:32,英語:72,語文:79,地理:93,政治:60,生物:50,物理:21,歷史:87,體育:24,美術:76,
1班 1033 王83 數學:58,英語:58,語文:38,地理:77,政治:83,生物:48,物理:21,歷史:77,體育:50,美術:85,
1班 1034 王84 數學:99,英語:62,語文:22,地理:60,政治:56,生物:52,物理:80,歷史:88,體育:30,美術:21,計算機:90
1班 1035 王85 數學:53,英語:67,語文:88,地理:80,政治:97,生物:31,物理:94,歷史:95,體育:54,美術:67,
1班 1036 王86 數學:77,英語:27,語文:29,地理:91,政治:84,生物:86,物理:27,歷史:49,體育:33,美術:61,
1班 1037 王87 數學:71,英語:27,語文:26,地理:62,政治:90,生物:96,物理:36,歷史:66,體育:24,
1班 1038 王88 數學:32,英語:91,語文:69,地理:30,政治:98,生物:23,物理:97,歷史:31,體育:71,美術:72,
1班 1039 王89 數學:35,英語:49,語文:22,地理:74,政治:56,生物:78,物理:65,歷史:22,體育:79,美術:80,
1班 1040 王90 數學:62,英語:56,語文:20,地理:94,政治:75,生物:99,物理:95,歷史:60,體育:88,美術:30,
1班 1041 王91 數學:87,英語:34,語文:78,地理:20,政治:93,生物:91,物理:60,歷史:74,體育:80,美術:25,
1班 1042 王92 數學:65,英語:41,語文:46,地理:96,政治:98,生物:33,物理:73,歷史:52,體育:83,美術:92,
1班 1043 王93 數學:69,英語:56,語文:88,地理:88,政治:84,生物:51,物理:50,歷史:72,體育:43,美術:71,計算機:90
1班 1044 王94 數學:79,英語:68,語文:39,地理:33,政治:27,生物:34,物理:46,歷史:25,體育:75,美術:60,
1班 1045 王95 數學:42,英語:39,語文:27,地理:75,政治:41,生物:29,物理:70,歷史:40,體育:70,美術:56,
1班 1046 王96 數學:30,英語:54,語文:85,地理:93,政治:97,生物:24,物理:77,歷史:78,體育:43,
1班 1047 王97 數學:84,英語:51,語文:53,地理:76,政治:27,生物:100,物理:39,歷史:57,體育:72,美術:66,
1班 1048 王98 數學:55,英語:91,語文:76,地理:52,政治:36,生物:72,物理:45,歷史:31,體育:38,美術:69,
1班 1049 王99 數學:97,英語:33,語文:33,地理:64,政治:22,生物:79,物理:83,歷史:54,體育:39,美術:46,
1班 1050 王100 數學:69,英語:79,語文:34,地理:54,政治:46,生物:41,物理:39,歷史:94,體育:74,美術:77,
2班 2001 王1 數學:25,英語:89,語文:96,地理:95,政治:95,生物:52,物理:45,歷史:67,體育:33,美術:27,
2班 2002 王2 數學:45,英語:78,語文:33,地理:44,政治:63,生物:36,物理:96,歷史:29,體育:92,美術:22,計算機:90
2班 2003 王3 數學:45,英語:94,語文:56,地理:37,政治:63,生物:61,物理:91,歷史:79,體育:39,美術:21,
2班 2004 王4 數學:64,英語:87,語文:99,地理:47,政治:63,生物:65,物理:60,歷史:27,體育:82,美術:35,
2班 2005 王5 數學:49,英語:72,語文:72,地理:95,政治:74,生物:23,物理:95,歷史:94,體育:32,美術:66,
2班 2006 王6 數學:22,英語:31,語文:94,地理:30,政治:66,生物:81,物理:74,歷史:72,體育:50,美術:32,
2班 2007 王7 數學:94,英語:30,語文:81,地理:81,政治:99,生物:87,物理:67,歷史:24,體育:53,美術:50,
2班 2008 王8 數學:81,英語:57,語文:71,地理:29,政治:83,生物:89,物理:57,歷史:49,體育:21,美術:76,
2班 2009 王9 數學:52,英語:33,語文:43,地理:63,政治:20,生物:57,物理:93,歷史:80,體育:44,美術:24,
2班 2010 王10 數學:35,英語:81,語文:60,地理:84,政治:29,生物:29,物理:30,歷史:58,體育:39,美術:100,
2班 2011 王11 數學:53,英語:99,語文:81,地理:82,政治:28,生物:24,物理:68,歷史:67,體育:61,美術:28,
2班 2012 王12 數學:30,英語:74,語文:66,地理:35,政治:22,生物:76,物理:93,歷史:57,體育:65,美術:82,
2班 2013 王13 數學:54,英語:42,語文:90,地理:64,政治:64,生物:43,物理:24,歷史:72,體育:68,美術:88,計算機:90
2班 2014 王14 數學:31,英語:89,語文:62,地理:26,政治:58,生物:72,物理:38,歷史:38,體育:52,美術:99,
2班 2015 王15 數學:73,英語:48,語文:36,地理:70,政治:86,生物:63,物理:65,歷史:85,體育:73,
2班 2016 王16 數學:54,英語:84,語文:31,地理:51,政治:76,生物:82,物理:93,歷史:73,體育:23,美術:57,
2班 2017 王17 數學:74,英語:23,語文:38,地理:28,政治:27,生物:43,物理:93,歷史:90,體育:34,美術:42,
2班 2018 王18 數學:65,英語:64,語文:61,地理:58,政治:82,生物:66,物理:25,歷史:60,體育:68,
2班 2019 王19 數學:61,英語:52,語文:31,地理:21,政治:53,生物:29,物理:97,歷史:73,體育:38,美術:94,
2班 2020 王20 數學:45,英語:38,語文:39,地理:92,政治:74,生物:50,物理:22,歷史:59,體育:85,美術:29,
2班 2021 王21 數學:20,英語:53,語文:66,地理:94,政治:43,生物:78,物理:71,歷史:44,體育:68,美術:69,
2班 2022 王22 數學:77,英語:79,語文:55,地理:29,政治:91,生物:65,物理:23,歷史:93,體育:27,美術:66,
2班 2023 王23 數學:48,英語:88,語文:58,地理:27,政治:91,生物:47,物理:84,歷史:41,體育:83,美術:44,
2班 2024 王24 數學:20,英語:60,語文:31,地理:76,政治:24,生物:69,物理:69,歷史:69,體育:25,美術:76,
2班 2025 王25 數學:39,英語:62,語文:92,地理:22,政治:43,生物:81,物理:30,歷史:64,體育:92,美術:48,計算機:90
2班 2026 王26 數學:71,英語:45,語文:24,地理:82,政治:90,生物:26,物理:72,歷史:71,體育:53,美術:74,
2班 2027 王27 數學:21,英語:44,語文:96,地理:67,政治:76,生物:83,物理:83,歷史:53,體育:93,美術:79,
2班 2028 王28 數學:97,英語:59,語文:24,地理:38,政治:27,生物:68,物理:73,歷史:86,體育:74,美術:60,
2班 2029 王29 數學:51,英語:74,語文:41,地理:100,政治:58,生物:69,物理:50,歷史:65,體育:62,
2班 2030 王30 數學:68,英語:76,語文:51,地理:25,政治:99,生物:38,物理:73,歷史:92,體育:74,美術:24,
2班 2031 王31 數學:58,英語:86,語文:22,地理:41,政治:59,生物:41,物理:29,歷史:74,體育:38,美術:64,
2班 2032 王32 數學:42,英語:73,語文:40,地理:71,政治:44,生物:85,物理:61,歷史:46,體育:45,美術:44,
2班 2033 王33 數學:52,英語:76,語文:24,地理:71,政治:84,生物:65,物理:75,歷史:44,體育:51,美術:95,
2班 2034 王34 數學:35,英語:98,語文:54,地理:33,政治:61,生物:79,物理:70,歷史:66,體育:97,美術:75,
2班 2035 王35 數學:44,英語:92,語文:78,地理:80,政治:73,生物:41,物理:27,歷史:30,體育:71,美術:43,
2班 2036 王36 數學:52,英語:43,語文:93,地理:29,政治:45,生物:65,物理:70,歷史:39,體育:26,美術:38,
2班 2037 王37 數學:45,英語:35,語文:39,地理:59,政治:60,生物:44,物理:53,歷史:100,體育:97,美術:24,計算機:90
2班 2038 王38 數學:38,英語:71,語文:23,地理:52,政治:55,生物:63,物理:95,歷史:93,體育:84,美術:66,
2班 2039 王39 數學:32,英語:89,語文:52,地理:21,政治:26,生物:89,物理:92,歷史:27,體育:97,
2班 2040 王40 數學:89,英語:29,語文:63,地理:69,政治:90,生物:60,物理:66,歷史:95,體育:83,美術:50,
2班 2041 王41 數學:71,英語:71,語文:73,地理:24,政治:69,生物:46,物理:27,歷史:21,體育:40,美術:43,
2班 2042 王42 數學:71,英語:31,語文:56,地理:40,政治:85,生物:47,物理:73,歷史:71,體育:94,美術:66,
2班 2043 王43 數學:100,英語:91,語文:99,地理:90,政治:86,生物:63,物理:57,歷史:21,體育:45,美術:67,
2班 2044 王44 數學:74,英語:81,語文:87,地理:73,政治:78,生物:44,物理:45,歷史:20,體育:25,美術:84,
2班 2045 王45 數學:87,英語:97,語文:68,地理:94,政治:73,生物:51,物理:44,歷史:38,體育:59,美術:55,
2班 2046 王46 數學:67,英語:48,語文:45,地理:63,政治:20,生物:61,物理:82,歷史:35,體育:85,美術:91,
2班 2047 王47 數學:62,英語:68,語文:92,地理:50,政治:48,生物:94,物理:52,歷史:68,體育:80,美術:44,
2班 2048 王48 數學:91,英語:31,語文:69,地理:27,政治:40,生物:54,物理:28,歷史:57,體育:55,美術:40,
2班 2049 王49 數學:45,英語:44,語文:61,地理:91,政治:77,生物:83,物理:51,歷史:23,體育:29,美術:77,
2班 2050 王50 數學:24,英語:41,語文:79,地理:57,政治:67,生物:65,物理:38,歷史:94,體育:26,美術:83,
原始碼檔案
相關文章
- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
- C# LINQ (語言整合查詢)C#
- C語言陣列求學生成績C語言陣列
- 21.C++實現計算八個學生的平均成績C++
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- jeefast實現科目成績查詢AST
- AVL樹(查詢、插入、刪除)——C語言C語言
- c語言if語句是如何變成彙編程式碼的?C語言
- 求平均成績 hd 2023
- mysql查詢每個班的各學科平均分的sql語句MySql
- SQL語言(結構化查詢語言)SQL
- prometheus之查詢語言Prometheus
- Kibana查詢語言(KQL)
- PAT乙級1004 成績排名 (20分)(C語言版)及解析C語言
- [WUSTCTF2020]顏值成績查詢-1TF2
- PAT1038 統計同成績學生
- Go語言專案實戰:基於開源資料的成語查詢Go
- MySQL — 資料查詢語言MySql
- C語言函式題-查詢陣列每行的最大值C語言函式陣列
- 靈活的API查詢語言——GraphQLAPI
- pta10-1 查詢沒有選修‘C語言‘課程的學生 (10分)C語言
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- C語言學習方法,怎麼學習C語言?C語言
- C語言實現雙連結串列的(終端)新增和查詢C語言
- C 語言程式構成要素
- 資料庫查詢語言(DQL)資料庫
- SQL語言基礎(子查詢)SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- C語言 - 條件編譯C語言編譯
- 用C語言編寫小遊戲——“井字棋”C語言遊戲
- 折半查詢法的平均查詢長度(成功/失敗)
- C/C++語言的學習方向C++
- C語言:一種高效、易學的程式語言C語言
- linux平臺下C語言按程式名查詢程式號pidLinuxC語言
- -- 9、查詢學過編號為“01“並且也學過編號為“02“的課程的同學的資訊
- oql4j物件查詢語言物件
- SQL語言基礎(高階查詢)SQL
- Linux下C語言編譯的問題LinuxC語言編譯