c語言學生成績查詢系統代碼
⑴ 【急!】用C語言編寫簡易學生成績查詢系統,C語言高手進!
睞口止
⑵ 用c語言實現一個簡單的學生成績管理系統,包括:學號,姓名,科目,成績
//用字元界面實現,比如按數字1,可以錄入學生所有信息;
//按數字2,顯示所有學生成績;
//按數字3,進入查詢,按學號或姓名查詢該學生是否存在,如果存在顯示他的所有信息,///否則給出不存在提示。
#include<stdio.h>
structstudent
{
charnum[6];/*學號*/
charname[10];
charsubject[20];/*科目*/
floatgrade;
}stu[10];
voidmenu()
{
printf("==================================== ");
printf("|學生成績管理系統| ");
printf("|1輸入學生成績| ");
printf("|2輸出學生成績| ");
printf("|3查詢學生成績| ");
printf("|0退出管理系統| ");
printf("==================================== ");
}
voidinput()
{
for(inti=0;i<10;i++)
scanf("%s%s%s%f",stu[i].num,stu[i].name,stu[i].subject,&stu[i].grade);
}
voidshow()
{
printf("學號 姓名 科目 成績 ");
for(inti=0;i<10;i++)
printf("%s %s %s %f ",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
voidserach()
{
charobj[10];
printf("輸入要查詢的學號");
scanf("%s",obj);
for(inti=0;i<10;i++)
{
if(strcmp(obj,stu[i].num))
{
printf("學號 姓名 科目 成績 ");
printf("%s %s %s %f ",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
}
}
intmain()
{
intselection;
while(true)
{
clrscr();
menu();
printf("請選擇0--3:");
scanf("%d",&selection);
switch(selection)
{
case1:input();break;
case2:show();break;
case3:search();break;
case0:exit(0);break;
default:printf("錯誤的輸入,請重新輸入:");
}
}
return0;
}
⑶ c語言學生成績管理系統的代碼
暈,你自己不可以弄么?再說要弄一起鬼才能運行,知道工程么?
頭文件:student.h
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define INITIAL_SIZE 100
#define INCR_SIZE 50
#define NUM_SUBJECT 5
struct student_info
{
char number[15];
char name[20];
char gender[4];
float score[NUM_SUBJECT];
float sum;
float average;
int index;
};
typedef struct student_info StuInfo;
extern int numStus;
extern StuInfo* records;
extern char savedTag;
extern int arraySize;
extern char* subject[];
void handle_menu(void);
int menu_select(void);
void addRecord(void);
void modifyRecord(void);
void display(void);
void queryInfo(void);
void removeRecord(void);
void sortInfo(void);
int saveRecords(void);
int loadRecords(void);
void newRecords(void);
void quit(void);
void showTable(void);
int findRecord(char* target,int targetType,int from);
int getIndex(float sum);
void Record(StuInfo* src,StuInfo* dest);
#endif // H_STUDENT_HH
各個文件:
主界面student.c
#include "student.h"
int numStus=0;
StuInfo *records=NULL;
char savedTag=0;
int arraySize;
char* subject[]={"語文","數學","英語","物理","化學"};
int main()
{
records=(StuInfo*)malloc(sizeof(StuInfo)*INITIAL_SIZE);
if(records==NULL)
{
printf("momory fail!");
exit(-1);
}
arraySize=INITIAL_SIZE;
printf("\n");
printf("\t****************************************\n");
printf("\t* 這是一個 *\n");
printf("\t* 學生成績管理程序 *\n");
printf("\t* 可以多學生成績進行管理 *\n");
printf("\t* 歡迎使用管理程序 *\n");
printf("\t****************************************\n");
printf("\n");
handle_menu();
}
void handle_menu(void)
{
for( ; ; ){
switch(menu_select())
{
case 0:
addRecord();
break;
case 1:
modifyRecord();
break;
case 2:
display();
break;
case 3:
queryInfo();
break;
case 4:
removeRecord();
break;
case 5:
sortInfo();
break;
case 6:
saveRecords();
break;
case 7:
loadRecords();
break;
case 8:
newRecords();
break;
case 9:
quit();
}
}
}
int menu_select()
{
char s[2];
int cn=0;
printf("\n");
printf("\t0. 增加學生信息\n");
printf("\t1. 修改學生信息\n");
printf("\t2. 顯示學生信息\n");
printf("\t3. 查詢學生信息\n");
printf("\t4. 刪除學生信息\n");
printf("\t5. 對學生信息進行排序\n");
printf("\t6. 保存學生信息至記錄文件\n");
printf("\t7. 從記錄文件讀取學生信息\n");
printf("\t8. 新建學生信息文件\n");
printf("\t9. 結束運行\n");
printf("\n\t左邊數字對應功能選擇,請選擇0-9: ");
for(; ;)
{
gets(s);
cn=atoi(s);
if(cn==0&&(strcmp(s,"0")!=0)) cn=11;
if(cn<0||cn>9) printf("\n\t輸入錯誤,重選0-9: ");
else break;
}
return cn;
}
void newRecords(void)
{
char str[5];
if(numStus!=0)
{
if(savedTag==1)
{
printf("現在已經有記錄,選擇處理已有記錄的方法。\n");
printf("是否保存原來的記錄?(Y/N)");
gets(str);
if(str[0]!='n'&&str[0]!='N')
saveRecords();
}
}
numStus=0;
addRecord();
}
void quit(void)
{
char str[5];
if(savedTag==1)
{
printf("是否保存原來的記錄? (Y/N)");
gets(str);
if(str[0]!='n'&&str[0]!='N')
saveRecords();
}
free(records);
exit(0);
}
排序模塊sort.c
#include"student.h"
void sortInfo(void)
{
char str[5];
int i,j;
StuInfo tmps;
if(numStus==0)
{
printf("沒有可供排序的記錄!");
return;
}
printf("請輸入您希望進行的排序方式:\n");
printf("1.按學號進行升序排序\n");
printf("2.按學號進行降序排序\n");
printf("3.按名稱進行升序排序\n");
printf("4.按名稱進行降序排序\n");
printf("5.按名次進行升序排序\n");
printf("6.按名次進行降序排序\n");
printf("7.按錯了,我並不想進行排序\n");
gets(str);
if(str[0]<'1'||str[0]>'6')return;
for(i=0;i<numStus-1;i++)
{
for(j=i+1;j<numStus;j++)
{
if((str[0]=='1' && strcmp(records[i].number,
records[j].number)>0)||
(str[0]=='2' && strcmp(records[i].number,
records[j].number)<0)||
(str[0]=='3' && strcmp(records[i].name,
records[j].name)>0)||
(str[0]=='4' && strcmp(records[i].name,
records[j].name)<0)||
(str[0]=='5' &&
records[i].index>records[j].index)||
(str[0]=='6' &&
records[i].index<records[j].index))
{
Record(&records[i],&tmps);
Record(&records[j],&records[i]);
Record(&tmps,&records[j]);
}
}
}
printf("排序已經完成\n");
savedTag=1;
}
保存數據模塊:
save_load.c
#include "student.h"
int saveRecords()
{
FILE *fp;
char fname[30];
if(numStus==0)
{
printf("沒有記錄可存");
return -1;
}
printf("請輸入要存的文件名(直接回車選擇文件stu_info):");
gets(fname);
if(strlen(fname)==0)
strcpy(fname,"stu_info");
if((fp=fopen(fname,"wb"))==NULL)
{
printf("不能存入文件!\n");
return -1;
}
printf("\n存文件…\n");
fwrite(records,sizeof(StuInfo)*numStus,1,fp);
fclose(fp);
printf("%d條件記錄已經存入文件,請繼續操作。\n",numStus);
savedTag = 0;
return 0;
}
int loadRecords(void)
{
FILE *fp;
char fname[30];
char str[5];
if(numStus!=0&&savedTag==0)
{
printf("請選擇您是要覆蓋現有記錄(Y),還是將");
printf("讀取的記錄添加到現有記錄之後(n)?\n");
printf("直接按回車則覆蓋現有記錄\n");
gets(str);
if(str[0]=='n'||str[0]=='N')
{//將讀取的記錄添加到現有記錄之後
savedTag=1;
}
else
{
if(savedTag==1)
{//覆蓋現有記錄
printf("讀取文件將會更改原來的記錄,");
printf("是否保存原來的記錄?(Y/n)");
gets(str);
if(str[0]!='n' && str[0]!='N')
saveRecords();
}
numStus=0;
}
}
printf("請輸入要讀取的文件名(直接按回車選擇文件stu_info):");
gets(fname);
if(strlen(fname)==0)
strcpy(fname,"stu_info");
if((fp=fopen(fname,"rb"))==NULL)
{
printf("打不開文件!請重新選接\n");
return -1;
}
printf("\n取文件…\n");
while(!feof(fp))
{
//現在的數組空間不足,需要重新申請空間
if(numStus>=arraySize)
{
records=realloc(records,(arraySize+
INCR_SIZE)*sizeof(StuInfo));
if(records==NULL)
{
printf("memory failed!");
exit(-1);
}
arraySize=arraySize+INCR_SIZE;
}
if(fread(&records[numStus],
sizeof(StuInfo),1,fp)!=1)break;
//按照addRecord函數的方法,更新名次
records[numStus].index=
getIndex(records[numStus].sum);numStus++;
}
fclose(fp);
printf("現在共有%d條記錄。",numStus);
return 0;
}
查詢模塊:
que_remv_modi.c
#include "student.h"
int findRecord(char* target,int targetType,int from)
{
int i;
for (i=from;i<numStus;i++)
{
if (( targetType==0&& strcmp(target,records[i].number)==0)||
(targetType==1 &&strcmp (target,records[i].name)==0 )||
(targetType==2 && atoi(target)==records[i].index))
return i;
}
return -1;
}
void queryInfo (void)
{
char str[5];
char target[20];
int type;
int count;
int i,j;
if (numStus==0)
{
printf ("沒有可供查詢的記錄!");
return;
}
while(1)
{
printf ("請輸入查詢的方式:(直接輸入回車則結束查詢)\n");
printf ("1. 按學號\n");
printf ("2.按姓名\n");
printf ("3.按名次\n");
gets(str);
if (strlen(str)==0)
break;
if (str[0]=='1')
{ printf ("請輸入欲查詢的學生的學號:");
gets(target);
type=0;
}
else if (str[0]=='2')
{
printf("請輸入欲查詢的學生的姓名:");
gets(target);
type=1;
}
else
{
printf ("請輸入欲查詢的學生的名次:");
gets(target);
type=2;
}
i= findRecord(target,type,0);
if(i==1)
{
//列印查詢到的學生的成績
showTable();
}
count = 0;
while (i !=-1)
{
count++;
printf("%s\t%s\t%s",records[i].number,
records[i].name,records[i].gender);
for (j=0;j<NUM_SUBJECT;j++)
printf ("\t%.lf",records[i].score[j]);
printf ("\t%.lf\t%.lf\t%d\n",
records[i].sum,records[i].average,
records[i].index);
i = findRecord(target,type,i+1);
}
if (count==0)
printf ("沒有符合條件的學生!\n");
else
printf ("一共找到了%d名學生的信息 \n\n",count);
}
}
/**********************
*刪除指定的記錄
***********************/
void removeRecord(void)
{char str[5];
char target[20];
int type;
int i,j;
int tmpi;
if(numStus==0)
{printf("沒有可供刪除的記錄!");
return;
}
while(1)
{
printf("請輸入如何找到欲刪除的記錄的方式;");
printf("(直接輸入回車則結果移除操作)\n");
printf("1.按學號\n");
printf("2.按姓名\n");
printf("3.按名次\n");
gets(str);
if(strlen(str)==0)break;
if(str[0]=='1')
{printf("請輸入學生的學號;");
gets(target);
type=0;
}
else if(str[0]=='2')
{printf("請輸入學生的姓名");
gets(target);
type=1;
}
else
{printf("請輸入學生的名次;");
gets(target);
type=2;
}
i=findRecord(target,type,0);
if(i==-1) printf("沒有符合條件的學生!\n");
while (i!=-1)
{showTable();
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
printf("確定要刪除這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{numStus--;
tmpi=records[i].index;
//將後面的記錄前移
for(j=i;j<numStus;j++)
{
Record(&records[j+1],&records[j]);
}
//將名次排在被刪記錄後面的記錄名次減1
for(j=0;j<numStus;j++)
{if(records[j].index>tmpi)
records[j].index--;
}}
//去下一個符合條件的記錄
i=findRecord(target,type,i+1);
}}
savedTag = 1;
}
/********************************************
* 將src指向的一條記錄復制給dest指向的記錄
*********************************************/
void Record(StuInfo* src, StuInfo* dest)
{
int j;
strcpy(dest->number,src->number);
strcpy(dest->name,src->name);
strcpy(dest->gender,src->gender);
for (j=0; j<NUM_SUBJECT; j++)
{
dest->score[j] = src->score[j];
}
dest->sum = src->sum;
dest->average = src->average;
dest->index = src->index;
}
/*********************************
* 修改指定學生的信息
**********************************/
void modifyRecord(void)
{
char str[5];
char target[20];
int type;
int i,j;
int tmpi;
float sum,mark;
int count=0; // 總分大於sum的人數
if(numStus==0)
{
printf("沒有可供修改的記錄!");
return;
}
while(1) {
printf("請輸入如何找到欲修改的記錄的方式: ");
printf(" (直接輸入回車則結束移除操作) \n");
printf("1. 按學號\n ");
printf("2. 按姓名\n ");
printf("3. 按名次\n ");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("請輸入該學生的學號: ");
gets(target);
type=0;
} else if(str[0]=='1')
{
printf("請輸入該學生的姓名: ");
gets(target);
type=1;
} else
{
printf("請輸入該學生的名次: ");
gets(target);
type=2;
}
i=findRecord(target,type,0);
if(i==-1) printf("沒有符合條件的學生! \n");
while(i != -1)
{
showTable();
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
printf("確定要修改這個學生的信息嗎?(y/n)");
gets(str);
if (str[0]=='y' || str[0]=='Y')
{
tmpi=records[i].index;
printf("下面請輸入該學生的信息: \n");
printf("請輸入學號: ");
gets(records[i].number);
printf("請輸入姓名: ");
gets(records[i].name);
printf("請輸入性別 (0為女,1為男): ");
gets(str);
if (str[0]=='0')
strcpy(records[i].gender," 女 ");
else
strcpy(records[i].gender," 男 ");
sum=0;
for(j=0;j<NUM_SUBJECT;j++ )
{
printf("請輸入%s成績: ",subject[j]);
gets(str);
mark=(float)atof(str);
records[i].score[j]=mark;
sum+=mark;
}
records[i].sum=sum;
records[i].average=sum/NUM_SUBJECT;
// 將原來名次排被修改記錄之後,而其sum小於等於
// 修改後記錄的sum的記錄的名次減1
// 將原來名次排在被修改記錄之前或相同,而其sum
// 大於修改後記錄的sum的記錄的名次增1
count = 0;
for (j=0;j<numStus;j++)
{
if(j==i) continue;
if(records[j].index>tmpi && records[j].sum>sum)
records[j].index--;
else if(records[j].index<=tmpi && records[j].sum<sum)
records[j].index++;
if (records[j].sum>sum)
count++;
}
records[i].index=count+1;
}
i=findRecord(target,type,i+1);
}
}
savedTag = 1;
}
增加學生信息模塊:
add_disp.c
#include "student.h"
void showTable(void)
{
int j;
printf("學號\t姓名\t性別");
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%s",subject[j]);
printf("\t總分\t平均分\t名次\n");
}
void display(void)
{
int i,j;
if(numStus==0)
{
printf("沒有可供顯示的記錄!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("輸入任一字元後繼續...\n");
getch();
printf("\n");
showTable();
}
}
}
int getIndex(float sum)
{
int i;
int count=0;
for(i=0;i<numStus;i++)
{
if(records[i].sum<sum)
{
records[i].index++;
}
else if(records[i].sum>sum)
{
count++;
}
}
return count+1;
}
void addRecord(void)
{
char str[10];
int i,j;
float mark,sum;
if(numStus==0)
printf("原來沒有記錄,現在建立新表\n");
else
printf("下面在當前表的末尾增加新的信息\n");
while(1)
{
printf("你將要添加一組信息,確定嗎?(Y/N)");
gets(str);
if (str[0]=='n' || str[0]=='N')
break;
if(numStus>=arraySize)
{
records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));
if(records == NULL)
{
printf("memory failed!");
exit(-1);
}
arraySize=arraySize+INCR_SIZE;
}
printf("請輸入學號:");
gets(records[numStus].number);
printf("請輸入姓名:");
gets(records[numStus].name);
printf("請輸入性別(0為女,1為男):");
gets(str);
if(str[0]=='0')
strcpy(records[numStus].gender,"女");
else
strcpy(records[numStus].gender,"男");
sum=0;
for(j=0;j<NUM_SUBJECT;j++)
{
printf("請輸入%s成績:",subject[j]);
gets(str);
mark=(float)atof(str);
records[numStus].score[j]=mark;
sum+=mark;
}
records[numStus].sum=sum;
records[numStus].average=sum/NUM_SUBJECT;
records[numStus].index=getIndex(sum);
numStus++;
}
printf("現在一共有%d條信息\n",numStus);
savedTag=1;
}
void dispaly(void)
{
int i ,j;
if(numStus==0)
{
printf("沒有可供顯示的記錄!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("輸入任一字元後繼續...\n");
getch();
printf("\n\n");
showTable();
}
}
}
⑷ C語言編程—學生成績查詢系統!緊急!!!
這個是我自己做的類式的,你可以按自己的要求改下·不難的和你的差不多,給分哦
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 10
/*****定義結構體*****/
typedef struct students /*標記為students*/
{
char num[10]; /*學生學號*/
char name[10]; /*學生姓名*/
int age; /*年齡*/
char sex[10]; /*性別*/
float cyy; /*C語言成績*/
float computer; /*計算機成績*/
float english; /*英語成績*/
float pj; /*平均成績*/
}STU;
STU temp;
void sort(STU students[],int n); //排序
void save(STU students[] ,int n);//導出
int Locate(STU students[],int n);//查詢
/*--------------顯示菜單--------------------*/
char displaymenu()
{
char k;
system("cls");
printf(" 學生成績管理 \n");
printf("-----------------------------------應用菜單-------------------------------------\n");
printf(" 1 輸入學生成績\n\n");
printf(" 2 輸出學生成績\n\n");
printf(" 3 查詢學生成績\n\n");
printf(" 4 修改學生成績\n\n");
printf(" 5 查看成績排序\n\n");
printf(" 6 查看成績統計\n\n");
printf(" 7 保存數據\n\n");
printf(" 8 讀取數據\n\n");
printf(" 9 退出系統\n\n");
printf(" 請選擇你想進行的操作:");
k=getchar();
return k;
}
/*****定義輸出函數*****/
void printheader() /*格式化輸出表頭*/
{
printf("\n\n************************學生成績管理系統****************************\n\n\n");
printf("| 學號 | 姓名 | 年齡 | 性別 | C語言成績 |計算機成績 | 英語成績| 平均成績 | \n");
}
void printdata(STU pp) /*格式化輸出表中數據*/
{
STU* p;
p=&pp;
printf("| %-5s| %-5s | %-4d| %-4s| %-6.0f| %-6.0f| %-5.0f| %-6.0f|\n",p->num,p->name,p->age,p->sex,p->cyy,p->computer,p->english,p->pj);
}
/*****添加學生信息*****/
int add(STU students[] ,int *n)
{
int i=0;
system("cls");
printf(" \n");
printf(" 請輸入學生信息 \n");
printf(" 退出請在學生號處輸入:0 \n");
printf("請輸入學生學號:\n ");
scanf("%s",students[i].num);
while(strcmp(students[i].num,"0") )//當輸入的學號為0時結束輸入
{
printf("請輸入學生姓名:\n ");
scanf("%s",students[i].name);
printf("****************\n\n\n");
printf("請輸入學生年齡:\n ");
scanf("%d",&students[i].age);
printf("****************\n\n\n");
printf("請輸入學生性別:\n");
scanf("%s",students[i].sex);
printf("****************\n\n\n");
printf("請輸入C語言成績:\n ");
scanf("%f",&students[i].cyy);
printf("****************\n\n\n");
printf("請輸入計算機成績:\n ");
scanf("%f",&students[i].computer);
printf("****************\n\n\n");
printf("請輸入英語成績:\n ");
scanf("%f",&students[i].english);
printf("****************\n\n\n");
students[i].pj=(students[i].cyy+students[i].computer+students[i].english)/3;
printf("學生平均成績: %-8.0f\n",students[i].pj);
i++;
printf("****************\n\n\n");
printf("請輸入學生學號:\n ");
scanf("%s",students[i].num);
}
*n=i;
save(students ,i);
return i;
}
/*****查詢學生信息函數*****/
int Locate(STU students[],int n)
{
int k,m=-1;
char num[10],name[20];
int i=0;
system("cls");
printf(" 退出請輸入:0 \n");
printf("請選擇以什麼方式查詢:1).按學生學號查詢 2).按學生姓名查詢 \n");
scanf("%d",&k);
if(k==1)
{
printf("請輸入你要查詢的學生學號:\n");
scanf("%s",num);
while(i<n)
{
if(strcmp(students[i].num,num)==0) /*若找到學號*/
{
printf(">>學生學號:%s\n*學生姓名:%s\n*學生年齡:%d\n*學生性別:%s\n>C語言成績:%-8.0f\n>計算機成績:%-8.0f\n>>英語成績:%-8.0f\n>>平均成績:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("沒有所找學生信息\n");
getchar();
}
else if(k==2)
{
printf("請輸入你要查詢的學生姓名:\n");
scanf("%s",name);
while(i<n)
{
if(strcmp(students[i].name,name)==0) /*若找到姓名*/
{ printf("學生學號:%s\n學生姓名:%s\n學生年齡:%d\n學生性別:%s\n學生C語言成績:%-8.0f\n計算機成績:%-8.0f\n英語成績:%-8.0f\n平均成績:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("沒有所找學生信息\n");
}
return m;/*返回一個根m便於修改學生信息*/
getchar();
}
/*****顯示函數*****/
void input(STU students[],int n)
{
int i;
system("cls"); //清屏
if(n==0) /*表示沒有學生信息記錄*/
{
printf("\n沒有學生記錄!\n");
}
printf("\n\n");
printheader(); /*輸出表格頭部*/
i=0;
while(i<n) /*逐條輸出數組中存儲的學生信息*/
{
printdata(students[i]);
i++;
}
getchar();
}
/*****修改子程序*****/
void Modify(STU students[],int n)
{
int i;
if(n<=0)
{
system("cls");
printf(" \n退出請輸入:0 \n");
printf("\n----------not found!----------\n");
getchar();
return ;
}
system("cls");
printf("修改學生信息");
input(students,n);
i=Locate(students,n); /*查詢到該數組元素,並返回下標值*/
if(i!=-1) /*若i!=-1,表明已經找到該數組元素*/
{
printf("請輸入新的學生信息: \n");
printf(" 學號: ");
scanf("%s",students[i].num);
printf(" 姓名: ");
scanf("%s",students[i].name);
printf(" 年齡: ");
scanf("%d",&students[i].age);
printf(" 性別: ");
scanf("%s",students[i].sex);
printf(" C語言: ");
scanf("%f",&students[i].cyy);
printf(" 英語: ");
scanf("%f",&students[i].english);
printf(" 計算機: ");
scanf("%f",&students[i].computer);
students[i].pj=(students[i].cyy+students[i].english+students[i].computer)/3;
printf("平均成績: %-9.0f\n",students[i].pj);
save(students ,n);
printf("\n-------------修改成功!-------------\n");
}
else
printf("not found!\n");
getchar();
}
/*****學生成績排序子程序*****/
void sort(STU students[],int n)
{
int i,j,a,b,c,d,e,f,k;
float p;
printf(" \n退出請輸入:0 \n");
printf("成績排序方式選擇: 1.按C語言 2.按英語 3.按平均 \n ");
scanf("%d",&k);
if(k==1) /*用選擇法對C語言排序*/
{
for(i=0; i<n; i++)
for(j=0;j<n-1;j++)
{
if(students[i].english<students[j+1].english)
{
temp=students[i];
students[i]=students[j+1];
students[j+1]=temp;
}
}
}
else if(k==2)/*英語用冒泡法*/
{
for(a=0; a<n-1; a++)
{
c=a;
for(b=a+1; b<n; b++)
if(students[b].cyy>students[c].cyy)
c=b;
if (c!=a)
{
temp=students[a];
students[a]=students[c];
students[c]=temp;
}
}
}
if(k==3) /*平均成績用插入法*/
{
for(d=1;d<n;d++)
{
p=students[d].pj;
for(e=0;e<d;e++)
if(students[e].pj<p)
break;
if(e==d)
continue;
for(f=d;f>e;f--)
students[f]=students[f-1];
students[e]=temp;
}
}
input(students,n); /*顯示排序後的所有記錄*/
save(students ,n);
printf("\n 排序完成!\n");
}
/*****統計學生分數在各等級的人數子程序*****/
void Tongji(STU students[],int n)
{
int count6085=0,count85=0,count60=0;
int i=0;
system("cls");
printf(" \n退出請輸入:0 \n");
input(students,n);
i=0;
while(i<n)
{
if(students[i].pj>85) {count85++;i=i+1;continue;} /*平均成績=>85*/
if(students[i].pj>=60&&students[i].pj<=85) {count6085++;i=i+1;continue;} /*60<平均成績<85*/
if(students[i].pj<60) {count60++;i=i+1;continue;} /*平均成績<60*/
}
printf("\n************統計結果************\n\n");
printf("平均成績高於85分的人數:%d \n",count85);
printf(" \n");
printf("平均成績在65分和80分之間的人數:%d \n",count6085);
printf(" \n");
printf("平均成績低於60分的人數:%d \n",count60);
printf(" \n");
printf("\n\n**********統計結束**********");
getchar();
}
/*****導出或保存數據*****/
void save(STU students[],int n)
{
FILE* fp;
int i=0;
fp=fopen("students","wb+");/*以讀寫方式打開創建一個二進制文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n*******打開文件錯誤!*******\n");
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&students[i],sizeof(STU),1,fp)==1)/*每次寫一條記錄或一個結構數組元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n*共導出%d個學生信息*\n",i);
getchar();
}
else
{
system("cls");
printf("**沒有信息導出*\n");
getchar();
}
fclose(fp); /*關閉此文件*/
}
/*****導入數據*****/
void Read(STU students[],int * n)
{
FILE* fp;
int i=0;
fp=fopen("students","rb");/*以只讀方式打開一個已有的二進制文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n********打開文件錯誤!********\n");
exit(0);
}
for(i=0;i<N;i++)
{
if(fread(&students[i],sizeof(STU),1,fp)==1)/*每次讀一條記錄或一個結構數組元素至文件*/
continue;
else
break;
}
*n=i;
if(i>0)
{
printf("\n\n************共導入:%d 個學生信息 ************\n",i);
getchar();
}
else
{ system("cls");
printf("************沒有信息導入!************\n");
getchar();
}
getchar();
fclose(fp); /*關閉此文件*/
}
/*****主函數*****/
void main()
{
STU students[N];
int n;
char s1[3],s2[3]={"1"};
int i,k;
printf("\n\n");
printf("******************************************************\n");
printf("^ < 歡迎使用本軟體> ^\n\n");
printf("^ <版本 : oooo> ^\n\n\n");
printf("^ <姓名>:盧景光 <班級>: 09623 <學號>:34 ^\n");
printf("^ ^\n");
printf("******************************************************\n");
printf("\n\n");
for(i=0;i<3;i++)
{
printf("\n請輸入密碼:");
gets(s1);
if(strcmp(s1,s2)==0)
break;
else
printf("\n>密碼錯誤,請重新輸入");
}
if(i>2)
{
printf("\n您已連續3次輸錯,系統將退出!\n");
exit(0);
}
else
{
while(1)
{
k=displaymenu();
switch(k)
{
case '1' : add(students,&n); break;
case '2' : Read(students,&n);input(students,n) ;break;
case '3' : Read(students,&n);Locate(students,n);break;
case '4' : Read(students,&n);Modify(students,n);;break;
case '5' : Read(students,&n);sort(students,n);break;
case '6' : Read(students,&n);Tongji(students,n); break;
case '7' : save(students,n) ;break;
case '8' : Read(students,&n);break;
case '9' : system("cls");
printf("\n **********謝謝您的使用**********\n");exit(0);break;
default : printf("\n\n輸入錯誤,輸入必須是0~9之間的一個數字!請重新輸入\n");getchar();getchar();
}
}
}
}
⑸ 如何用C語言編寫"學生成績查詢系統"
高點分我考慮 - -
⑹ 誰會學生成績查詢系統,麻煩發代碼過來!!要C語言的
#include<iostream.h>
#include <fstream.h>
#include<iomanip.h>
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)
typedef struct student //定義學生結點
{
int num;
char name[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cinn(); //成績錄入函數
Student *sort_1(Student *head,int); //選擇排序 函數
void sort_2(Student *head); // //求當前高分及均分函數
void print(Student *head); //列印出當前成績
Student *sort_all(Student *head); //學生成績統計排序入口函數
void find(Student *head); //查詢函數
Student *add_new(Student *head); //增加新學生信息函數
void deletee(Student *q,Student *p); //刪除學生信息
void update(Student *p); //更新學生信息
void deletee(Student *q,Student *p)
{ q->next=p->next;
delete p;
}
void update(Student *p)
{
printf("\n請重新錄入該生信息\n");
printf("\n請輸入該學生的學號\n");
scanf("%d",&p->num);
printf("請輸入該學生的語文成績\n:");
scanf("%d",&p->score[0]);
printf("請輸入該學生的數學成績\n:");
scanf("%d",&p->score[1]);
printf("請輸入該學生的英語成績\n:");
scanf("%d",&p->score[2]);
printf("請輸入該學生的計算機成績\n:");
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
}
Student *cinn()
{
int flag; //暫存學號變數
Student *head,*p1,*p2;
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n請輸入第%d名學生的學號,學號為0表示結束輸入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
p1->num=flag;
printf("請輸入第%d名學生的姓名:",n);
scanf("%s",p1->name);
printf("請輸入第%d名學生的語文成績:",n);
scanf("%d",&p1->score[0]);
printf("請輸入第%d名學生的數學成績:",n);
scanf("%d",&p1->score[1]);
printf("請輸入第%d名學生的英語成績:",n);
scanf("%d",&p1->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n請輸入第%d名學生的學號,沒有此學生則輸入0表示結束:",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
return head;
}
Student *sort_all(Student *head) //學生成績統計排序入口函數
{
int choose;
for(;;)
{
printf("\n\t\t# # # # # 學生成績統計排序 # # # #\n");
printf("\t\t#\t1.按學生學號排序\t #\n");
printf("\t\t#\t2.按學生總分排序\t #\n");
printf("\t\t#\t3.按學生語文成績排序\t #\n");
printf("\t\t#\t4.按學生數學成績排序\t #\n");
printf("\t\t#\t5.按學生英語成績排序\t #\n");
printf("\t\t#\t6.按學生計算機成績排序\t #\n");
printf("\t\t#\t7.單科高分及均分\t #\n");
printf("\t\t#\t8.顯示當前學生成績\t #\n");
printf("\t\t#\t0.返回上一級菜單\t #\n");
printf("\t\t# # # # # 由張駿友情提供# # # # #\n\n");
printf("請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose);break; //調用排序函數
case 7:print(head);sort_2(head);break;
case 8:print(head);break;
case 0:return head;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}
Student *sort_1(Student *head,int choose) //選擇排序 函數
{
Student *p1,*p2=head->next,*pm,*px; //p2從第一個學生結點開始
Student mid;
if (!p2) return head; //判斷鏈表是否為空
for(p1=p2;p1->next!=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2;break; //按學號從小到達排序
case 2:if (pm->sum<p2->sum) pm=p2;break; //按總分從大到小排序
case 3:if (pm->score[0]<p2->score[0]) pm=p2;break;//按單科從大到小排序
case 4:if (pm->score[1]<p2->score[1]) pm=p2;break;
case 5:if (pm->score[2]<p2->score[2]) pm=p2;break;
case 6:if (pm->score[3]<p2->score[3]) pm=p2;break;
}
if (pm!=p1)
{
mid=*pm; //交換兩個節點的內容
*pm=*p1;
*p1=mid;
px=pm->next;//交換兩個節點的順序
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序後的成績表為:\n");
print(head); //列印出當前學生成績報表
return head;
}
void sort_2(Student *head) //求當前高分及均分函數
{
Student *p=head->next; //從當前第一個學生開始
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0; //總分
float aver_1,aver_2,aver_3,aver_4,aver_sum; //平均分
if (!p) return;
max_1=min_1=p->score[0];max_2=min_2=p->score[1]; //賦初值
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0]; //求各科最大最小值
else if (min_1>p->score[0]) min_1=p->score[0];
if (max_2<p->score[1]) max_2=p->score[1];
else if (min_2>p->score[1]) min_2=p->score[1];
if (max_3<p->score[2]) max_3=p->score[2];
else if (min_3>p->score[2]) min_3=p->score[2];
if (max_4<p->score[3]) max_4=p->score[3];
else if (min_4>p->score[3]) min_4=p->score[3];
if (max_sum<p->sum) max_sum=p->sum;
else if (min_sum>p->sum) min_sum=p->sum;
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
} //求各科總分 平均分
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;
aver_sum=aver_1+aver_2+aver_3+aver_4; //求總分的平均分
printf("總共%d名學生,具體數據為:\n",n);
printf("語文最高分為%d,最低分為%d,平均分為%.2f\n",max_1,min_1,aver_1);
printf("數學最高分為%d,最低分為%d,平均分為%.2f\n",max_2,min_2,aver_2);
printf("英語最高分為%d,最低分為%d,平均分為%.2f\n",max_3,min_3,aver_3);
printf("計算機最高分為%d,最低分為%d,平均分為%.2f\n",max_4,min_4,aver_4);
printf("總分最高分為%d,最低分位%d,平均分為%.2f\n",
max_sum,min_sum,aver_sum);
}
void find(Student *head) //查找對應信息的學生
{
Student *p,*q;
int choose,fnum;
char tem[20];
if (n==0) {printf("\n當前系統沒有任何學生數據,您就別費勁了!\n ");return;}
for(;;)
{
printf("\n請輸入您要查詢學生的方式:\n\n");
printf("1、按學號查詢;2、按姓名查詢;0、我不查詢了。\n\n");
printf("請選擇:");
scanf("%d",&choose);
while(getchar()!='\n');
if (choose==1)
{
printf("\n請輸入你要查詢的學生的學號,輸入0退出學號查詢:");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的學號,請重新輸入,輸入0表示結束:");
scanf("%d",&fnum);
}
else if (p->num==fnum)
{for(q=head->next;q->next!=p;q=q->next);
printf("\n學號為%d學生的數據為:\n",p->num);
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機\
成績 總分\n");
printf("%d\t%s\t %d %d %d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n請選擇後續操作 1.修改該學生信息 2.刪除該學生信息 輸入0退出學號查詢\n");
int choosel;
scanf("%d",&choosel);
for(;choosel;)
{
if(choosel==1)
{
update(p);
printf("\n\n請繼續選擇後續操作:1.再次修改 2.刪除該生 0表示退出");
scanf("%d",&choosel);
}
else if(choosel==2)
{deletee(q,p);
printf("\n\n請繼續選擇後續操作:0表示退出");
scanf("%d",&choosel);
}
}
printf("\n\n請輸入你還要查詢的學生的學號,輸入0表示不按學\
號查詢了:");
scanf("%d",&fnum);
}
}
}
else if (choose==2)
{
printf("\n請輸入你要查詢的學生的姓名,輸入0退出姓名查詢:");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的姓名,請重新輸入,輸入0表\
示結束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
{for(q=head->next;q->next!=p;q=q->next);
printf("\n姓名為%s學生的數據為:\n",p->name);
printf("學號\t姓名\t語文成績 數學成績 英語成績 \
計算機成績 總分\n");
printf("%d\t%s\t %d %d %d \
%d %d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum);
printf("\n\n請選擇後續操作 1.修改該學生信息 2.刪除該學生信息 輸入0退出學號查詢\n");
int choosel;
scanf("%d",&choosel);
for(;choosel;)
{
if(choosel==1)
{
update(p);
printf("\n\n請繼續選擇後續操作:1.再次修改 2.刪除該生 0表示退出");
scanf("%d",&choosel);
}
else if(choosel==2)
{deletee(q,p);
printf("\n\n請繼續選擇後續操作:0表示退出");
scanf("%d",&choosel);
}
}
printf("\n\n請輸入你還要查詢的學生的姓名,輸入0表\
示不按姓名查詢了:");
scanf("%s",tem);
}
}
}
else if (choose==0) {printf("\n你選擇了不查詢!\n");break;}
else {printf("\n你以其他方式選擇了不查詢!\n");break;}
}
}
Student *add_new(Student *head) //添加新的學生信息
{
Student *p;
int flag;
printf("\n\n請輸入你要新加入學生的學號,學號為0表示結束輸入:");
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
p=(Student *)malloc(LEN);
p->num=flag;
printf("請輸入新加入學生的姓名:",n);
scanf("%s",p->name);
printf("請輸入新加入學生的語文成績:",n);
scanf("%d",&p->score[0]);
printf("請輸入新加入學生的數學成績:",n);
scanf("%d",&p->score[1]);
printf("請輸入新加入學生的英語成績:",n);
scanf("%d",&p->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n請輸入還要加入學生的學號,沒有此學生則輸入0表示結束:");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入後的成績表為:\n");
print(head);
return head;
}
void print(Student *head) //列印出當前的成績
{
Student *p=head->next;
if (!p) {printf("\n\n此系統目前沒有任何學生數據!\n\n\n");return;}
printf("此系統目前共計學生%d名:\n",n);
printf("**************************學生成績統計一覽************************\
*****\n");
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機成績 總分\n");
for(;p;p=p->next)
printf("%d\t%s\t %d %d %d %d %d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************此軟體由張駿友情提供*************************\
*\n\n");
}
void stuconserve(Student *head) //將內容保留至文件,文件名為outfile2_3
{
Student *p;
fstream outfile("outfile2_3.txt",ios::out|ios::app);
if(!outfile)
{
cout<<"文件不能打開"<<endl;
abort();
}
//fprintf(outfile2_3.txt," 學號 姓名 性別 語文 數學 外語\n");
p=head->next;
while(p)
{outfile<<setw(5)<<p->num<<setw(15)<<p->name
<<setw(5)<<p->score[0]<<setw(5)<<p->score[1]<<setw(5)<<p->score[2]<<setw(5)<<p->score[3]<<endl;
p=p->next;
}
outfile.close();
}
int main()
{
Student *head;
int choose,i;
head=(Student *)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t* * * * * 學生成績管理系統 * * * *\n");
printf("\t\t*\t1.學生數據鍵盤錄入\t *\n");
printf("\t\t*\t2.學生數據統計排序\t *\n");
printf("\t\t*\t3.查詢修改刪除學生數據\t *\n");
printf("\t\t*\t4.插入學生數據\t\t *\n");
printf("\t\t*\t5.顯示當前成績表\t *\n");
printf("\t\t*\t0.保存退出成績管理系統\t *\n");
printf("\t\t* * * * * 由張駿友情提供* * * * *\n\n");
printf("\n請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****");
printf("\n\n 此選項將會建立新的學生數據系統 ,原來的數據將\
不再存在,你確信要刪除原來的數據並建立新的數據系統么?\n\n");
printf("1、建立新的數據系統;0、放棄建立新的數據系統。\n\n");
printf("請選擇:");
scanf("%d",&i);
if (i==1) {head=cinn();print(head);break;}
else if (i==0)
{
printf("\n你選擇了放棄建立新的數據系統!\n");
break;
}
else {
printf("\n你做出別的選擇,當作放棄建立!\n");
break;
}
case 2:head=sort_all(head);break;
case 3:find(head);break;
case 4:head=add_new(head);
case 5:print(head);break;
case 0: stuconserve(head); system("pause");return 0;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}
⑺ 用C語言編寫簡易學生成績查詢系統
|如6 |易 |我們可以為你提供一份針對你的題目的適用於初學者的代碼
5 |軟 |如有進一步內需求,容請我們聯系,
7 |科 |告訴我你的問題和Email,
1 |技 |有時間可以幫你,絕對救急,
5 |為 |若要獲取我的QQ,請查看個人資料,或見每行開頭
6 |您 |或者使用網路Hi給我留言
1 |提 |陪你順利畢業,
5 |供 |此回復針對所有來訪者和需求者有效,帶著你的Email和問題來找我
⑻ c語言程序設計-學生成績管理系統(成績的查詢,統計,用結構體,指針)
#include<stdio.h>
#include<stdlib.h>
struct stu
{
int num;
char name[20];
float grade;
};
int main()
{
int n,i,n1;
float sum=0.0,ave;
printf("請輸入學生人數:\n");
scanf("%d",&n);
struct stu *p;
p=(struct stu*)calloc(n,sizeof(stu));
printf("請輸入%d個學生信息(學號,姓名,成績):\n",n);
for(i=0;i<n;i++)
{
scanf("%d %s %f",&p[i].num,&p[i].name,&p[i].grade);
}
for(i=0;i<n;i++)
{
printf("%d %s %f\n",p[i].num,p[i].name,p[i].grade);
}
printf("請輸入要查詢學生成績的編號:\n");
scanf("%d",&n1);
printf("%d號學生的成績為:%f\n",n1,p[n1-1].grade);
for(i=0;i<n;i++)
{
sum+=p[i].grade;
}
ave=sum/n;
printf("%d個學生的平均成績為:%f\n",n,ave);
delete []p;
return 0;
}
你所指的統計功能不知道是什麼,我就改成計算平均數了
⑼ c語言 學生成績查詢系統
C語言程序:
#include<stdio.h>
#defineMAX100
/*顯示菜單*/
voidShowMenu()
{
printf(" ");
printf("||===================================|| ");
printf("||-----------------------------------|| ");
printf("||-------學生成績查詢系統------------|| ");
printf("||-----------------------------------|| ");
printf("||-----------------------------------|| ");
printf("||-----------------------------------|| ");
printf("||===================================|| ");
printf(" ");
printf("|----------------------------------| ");
printf("|----------請輸入(0-6)-----------| ");
printf("|1.輸入成績------------| ");
printf("|2.顯示成績------------| ");
printf("|3.查詢平均分----------| ");
printf("|4.查詢最高分----------| ");
printf("|5.成績排名------------| ");
printf("|6.退出----------------| ");
printf("|----------------------------------|請輸入0-6:");
}
/*排序*/
voidSort(intarr[],intn)
{
inti,j,k;
inttemp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(arr[j]>arr[k])
{
k=j;
}
}
if(k!=i)
{
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}
}
}
voidmain(){
intchoice;
intscores[MAX]={80,78}; /*存儲成績*/
intn=2; /*人數*/
intback[MAX];
intmax; /*最高分*/
doubleavg; /*平均分*/
inti;
while(1)
{
ShowMenu();
scanf("%d",&choice);
switch(choice)
{
case1: /*輸入成績*/
{
printf("請輸入新成績:");
scanf("%d",&scores[n]);
n++;
break;
}
case2: /*顯示成績*/
{
printf("成績列表: ");
for(i=0;i<n;i++)
{
printf("%4d",scores[i]);
}
printf(" ");
break;
}
case3: /*查詢平均分*/
{
avg=0;
for(i=0;i<n;i++)
{
avg+=scores[i];
}
avg/=n;
printf("平均分:%.2lf ",avg);
break;
}
case4: /*查詢最高分*/
{
max=scores[0];
for(i=1;i<n;i++)
{
if(scores[i]>max)
{
max=scores[i];
}
}
avg/=n;
printf("最高分:%d ",max);
break;
}
case5: /*成績排名*/
{
for(i=0;i<n;i++)
{
back[i]=scores[i];
}
Sort(back,n);
printf("成績排名: ");
printf("%8s%8s ","名次","成績");
for(i=0;i<n;i++)
{
printf("%8d%8d ",i+1,back[i]);
}
printf(" ");
break;
}
case6: /*退出*/
{
return;
}
default: /*繼續*/
{
break;
}
}
}
}
運行測試:
⑽ c語言成績查詢系統原碼
呵呵,差不多的一個你可以參考一下
#include <stdio.h>
#include<dos.h>
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字元串函數*/
#include<memory.h> /*內存操作函數*/
#include<ctype.h> /*字元操作函數*/
#include "conio.h"
#define LEN sizeof(STUDENT)
typedef struct stu /*定義結構體數組用於緩存數據*/
{char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*函數原型*/
STUDENT *init(); /*初始化函數*/
int menu_select(); /*菜單函數*/
STUDENT *create(); /*創建鏈表*/
void print(STUDENT *head); /* 顯示全部記錄*/
void search(STUDENT *head); /*查找記錄*/
STUDENT *mydelete(STUDENT *head); /*刪除記錄*/
STUDENT *sort(STUDENT *head); /*排序*/
STUDENT *insert(STUDENT *head,STUDENT *mynew); /*插入記錄*/
void save(STUDENT *head); /*保存文件*/
STUDENT *load(); /*讀文件*/
/*主函數界面*/
void main()
{STUDENT *head,mynew;
head=init(); /*鏈表初始化,使head的值為NULL*/
for(;;) /*循環無限次*/
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=mydelete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&mynew);break; /*&mynew表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*如菜單返回值為9則程序結束*/
}
}
}
/*初始化函數*/
STUDENT *init()
{
return NULL; /*返回空指針*/
}
/*菜單選擇函數*/
menu_select()
{int n;
printf("\n按任一鍵進入主菜單...... \npress any key to enter the menu......"); /*按任一鍵進入主菜單*/
getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
system("cls");
printf("********************************************************************************\n");
printf("\t\t 歡迎 Welcome to\n");
printf("\n\t\t\t 使用學生管理系統1.0\n\n\t\t\t\t\t\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 輸入學生成績記錄 Enter the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. 顯示 Print the record\n"); /*顯示*/
printf("\t\t\t3. 尋找 Search record on name\n"); /*尋找*/
printf("\t\t\t4. 刪除 mydelete a record\n"); /*刪除*/
printf("\t\t\t5. 排序 Sort to make mynew a file\n"); /*排序*/
printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/
printf("\t\t\t7. 保存 Save the file\n"); /*保存*/
printf("\t\t\t8. 讀取 Load the file\n"); /*讀取*/
printf("\t\t\t9. 退出 Quit\n"); /*退出*/
printf("********************************************************************************\n");
do{
printf("\n\t\t\t輸入你的選擇Enter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9); /*如果選擇項不在1~9之間則重輸*/
return(n); /*返回選擇項,主函數根據該數調用相應的函數*/
}
/*輸入函數*/
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/
system("cls");
for(;;)
{p=(STUDENT *)malloc(LEN); /*開辟一個新的單元*/
if(!p) /*如果指針p為空*/
{printf("\n輸出內存溢出. Out of memory."); /*輸出內存溢出*/
return (head); /*返回頭指針,下同*/
}
printf("輸入學號Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果學號首字元為0則結束輸入*/
printf("輸入名字Enter the name:");
scanf("%s",p->name);
printf("請輸入3門成績Please enter the %d scores\n",3); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<3;i++) /*3門課程循環3次*/
{
do{
printf("成績score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*確保成績在0~100之間*/
printf("數據錯誤,請重新輸入 Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*累加各門成績*/
}
p->sum=s; /*將總分保存*/
p->average=(float)s/3; /*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0; /*未排序前此值為0*/
p->next=head; /*將頭結點做為新輸入結點的後繼結點*/
head=p; /*新輸入結點為新的頭結點*/
}
return(head);
}
/* 顯示全部記錄函數*/
void print(STUDENT *head)
{int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
system("cls");
p=head; /*初值為頭指針*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找記錄函數*/
void search(STUDENT *head)
{STUDENT *p; /* 移動指針*/
char s[5]; /*存放姓名用的字元數組*/
system("cls");
printf("請輸入個姓名來查找. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*將頭指針賦給p*/
while(strcmp(p->name,s) && p != NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p!=NULL) /*如果指針不為空*/
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n沒有該學生 There is no num %s student on the list.\n",s); /*顯示沒有該學生*/
}
/*刪除記錄函數*/
STUDENT *mydelete(STUDENT *head)
{int n;
STUDENT *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/
char c,s[6]; /*s[6]用來存放學號,c用來輸入字母*/
system("cls");
printf("請輸入要刪除的學號 Please enter the mydeleted num: ");
scanf("%s",s);
p1=p2=head; /*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s) && p1 != NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next; /*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0) /*學號找到了*/
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\n是否要刪除,輸入Y刪除,N則退出\nAre you sure to mydelete the student Y/N ?"); /*提示是否要刪除,輸入Y刪除,N則退出*/
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不刪除,則跳出本循環*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,說明被刪結點是首結點*/
head=p1->next; /*把第二個結點地址賦予head*/
else
p2->next=p1->next; /*否則將一下結點地址賦給前一結點地址*/
n=n-1;
printf("\n學號為(Num): %s 學生以被刪除(student have been mydeleted.)\n",s);
printf("別忘了保存. Don't forget to save.\n");break; /*刪除後就跳出循環*/
}
}
}
else
printf("\n沒有這個學生在表上\nThere is no num %s student on the list.\n",s); /*找不到該結點*/
return(head);
}
/*排序函數*/
STUDENT *sort(STUDENT *head)
{int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定義臨時指針*/
temp=head->next; /*將原表的頭指針所指的下一個結點作頭指針*/
head->next=NULL; /*第一個結點為新表的頭結點*/
while(temp!=NULL) /*當原表不為空時,進行排序*/
{
t=temp; /*取原表的頭結點*/
temp=temp->next; /*原表頭結點指針後移*/
p1=head; /*設定移動指針p1,從頭指針開始*/
p2=head; /*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->average<p1->average&&p1!=NULL) /*作成績平均分比較*/
{
p2=p1; /*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1; /*待排序點的後繼為p*/
head=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1; /*t的後繼是p1*/
p2->next=t; /*p2的後繼是t*/
}
}
p1=head; /*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=NULL) /*當p1不為空時,進行下列操作*/
{
i++; /*結點序號*/
p1->order=i; /*將結點序號賦值給名次*/
p1=p1->next; /*指針後移*/
}
printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/
return (head);
}
/*插入記錄函數*/
STUDENT *insert(STUDENT *head,STUDENT *mynew)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1指向第一個結點*/
p0=mynew; /*p0指向要插入的結點*/
printf("\nPlease enter a mynew record.\n"); /*提示輸入記錄信息*/
printf("輸入學號Enter the num:");
scanf("%s",mynew->num);
printf("輸入名字Enter the name:");
scanf("%s",mynew->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<3;i++)
{
do{
printf("成績score%d:",i+1);
scanf("%d",&mynew->score[i]);
if(mynew->score[i]>100||mynew->score[i]<0)
printf("數據錯誤Data error,please enter again.\n");
}while(mynew->score[i]>100||mynew->score[i]<0);
sum1=sum1+mynew->score[i]; /*累加各門成績*/
}
mynew->sum=sum1; /*將總分存入新記錄中*/
mynew->average=(float)sum1/3;
mynew->order=0;
if(head==NULL) /*原來的鏈表是空表*/
{head=p0;p0->next=NULL;} /*使p0指向的結點作為頭結點*/
else
{while((p0->average<p1->average)&&(p1->next!=NULL))
{p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*p1後移一個結點*/
}
if(p0->average>=p1->average)
{if(head==p1)head=p0; /*插到原來第一個結點之前*/
else p2->next=p0; /*插到p2指向的結點之後*/
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;} /*插到最後的結點之後*/
}
n=n+1; /*結點數加1*/
head=sort(head); /*調用排序的函數,將學生成績重新排序*/
printf("\n學生Student %s 已被更新have been inserted.\n",mynew->name);
printf("不要忘了保存Don't forget to save the mynew file.\n");
return(head);
}
/*保存數據到文件函數*/
void save(STUDENT *head)
{FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10];
printf("輸出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*為輸出打開一個二進制文件,為只寫方式*/
{
printf("打不開文件Cannot open the file\n");
return; /*若打不開則返回菜單*/
}
printf("\n保存中...Saving the file......\n");
p=head; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,LEN,1,fp); /*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("保存成功....Save the file successfully!\n");
}
/* 從文件讀數據函數*/
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打開一個二進制文件,為只讀方式*/
{
printf("打不開文件Can not open the file.\n");
return(head);
}
printf("\n尋找文件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*開辟一個新單元*/
if(!p1)
{
printf("內存溢出!Out of memory!\n");
return(head);
}
head=p1; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果沒讀到數據,跳出循環*/
p1->next=(STUDENT *)malloc(LEN); /*為下一個結點開辟空間*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp);
printf("\n你成功的從文件中讀取了數據!\nYou have success to read data from the file!\n");
return (head);
}