c語言成績查詢系統
⑴ 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語言成績查詢系統原碼
呵呵,差不多的一個你可以參考一下
#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);
}
⑶ c語言成績查詢系統的錄入部分問題
scanf_s使用有問題? 這個我沒用過 用scanf改寫了,發現沒問題。查閱文檔發現scanf_s還有一個長度參數,我仔細讀讀在看。http://msdn.microsoft.com/en-us/library/w40768et.aspx
測試了下 , 要加個長度才行。如 scanf_s("%s", stu.no, 8);
哦 對了還有 你那些成績是double類型的,不要使用%s如【scanf_s("%s",&stu.c); 】這樣會出錯的。
⑷ 用C語言編寫簡易學生成績查詢系統
6 |易 |我們可以為你提供一份針對你的題目的適用於初學者的代碼
5 |軟 |如有進一步需求,請我們聯系,
7 |科 |告訴我你的問題和Email,
1 |技 |有時間可以幫你,絕對救急,
5 |為 |若要獲取我的QQ,請查看個人資料,或見每行開頭
6 |您 |或者使用網路Hi給我留言
1 |提 |陪你順利畢業,
5 |供 |此回復針對所有來訪者和需求者有效,帶著你的Email和問題來找我
⑸ 如何用c語言編一個成績查詢系統
如果你是要做一個非常專業的商業軟體,這個其實不太適合用C語言來編寫。你可以考慮其他高級語言如java,c#,etc.
如果你僅僅是想在功能上實現成績查詢,而且數據量不是那種特別大,比如千萬,上億級別的,用C語言以二進制文件讀寫的方式完全可以輕松實現。
下面說說大概的思路:
1.你可以定義一個結構體來描述成績,結構體的變數包括比如姓名,學號,班級,語文成績,數學成績,etc。
2.所有學生的成績,就是一個個的結構體 把所有結構體保存到二進制文件中。
3.如果需要查詢成績,就先從二進制文件把所有的成績讀取出來,保存到數組或者鏈表中。然後在數組或者鏈表中進行查詢。
如果是要刪除某一個學生的記錄,就從數組或者鏈表中先找到該學生的記錄,然後刪掉該元素,再保存回二進制文件。
如果是要添加一個學生成績信息,就是在數組或者鏈表中添加一個元素,然後保存為二進制文件。
用C語言以二進制文件的方式模擬資料庫系統的操作,大體的思路就是這樣的。
如果你非要以資料庫的方式來存取數據,用C語言,也不是絕對不可以,那就比較繁瑣了,自行查找C語言訪問資料庫相關的知識。
⑹ C語言程序設計學生成績查詢系統
#include"stdio.h"
#include"string.h"
#define
N
1000
void
menu();
int
password();
int
de();
int
uninque(struct
STUDENT
shu[],int
len,int
xuehao);
void
shuchu(struct
STUDENT
shu[],int
len);
void
send(struct
STUDENT
shu[],int
len);
int
readFromFile(struct
STUDENT
shu[]);
void
chaxun(struct
STUDENT
shu[],int
len);
void
paixu(struct
STUDENT
shu[],int
len);
struct
STUDENT
{
int
num;
char
name[10];
int
score;
}
shu[N];
main()
{
int
len=0,key,choice;
do
{
key=password();
}while(key==0);
while(1)
{
menu();
printf("請輸入選項<1,2,3,4,5,6,7>\n");
scanf("%d",&choice);
switch(choice)
{
case
1:printf("輸入信息函數\n");
len=de(shu,len);
break;
case
2:printf("輸出函數被調用\n");
shuchu(shu,len);
break;
case
3:printf("保存到文件函數被調用\n");
send(shu,len);
break;
case
4:printf("從文件讀函數被調用\n");
len=readFromFile(
shu);
break;
case
5:printf("按學號查詢函數被調用\n");
chaxun(shu,len);
break;
case
6:printf("按成績排序函數被調用\n");
paixu(shu,len);
break
;
case
7:exit(0);break;
}
}
}
void
menu()
{
printf("\n");
printf("
*******************************************\n");
printf("
*
學生成績管理系統2.0
*\n");
printf("
*
1.輸入信息
*\n");
printf("
*
2.輸出信息
*\n");
printf("
*
3.保存到文件
*\n");
printf("
*
4.從文件讀
*\n");
printf("
*
5.按學號查詢
*\n");
printf("
*
6.按成績排序(由大到小)
*\n");
printf("
*
7.程序結束
*\n");
printf("
*******************************************\n");
}
int
password()
{
char
a[100];
char
key[]="asd";
printf("請輸入密碼\n");
scanf("%s",&a);
if(strcmp(a,key)==0)
return
1;
else
return
0;
}
int
de(struct
STUDENT
shu[],int
len)
{
int
i=len;
int
flag=0;
int
xuehao,bank,chengji;
while(i<N)
{
while(1)
{
printf("學號");
scanf("%d",&xuehao);
if(xuehao==0)
{
flag=1;
break;
}
bank=uninque(shu,i,xuehao);
if(bank==0)
{
shu[i].num=xuehao;
break;}
}
if(flag==1)
break;
printf("姓名");
scanf("%s",&shu[i].name);
while
(1)
{
printf("成績");
if(scanf("%d",&chengji)==1)
{break;}
printf("輸入格式錯誤,請重新輸入!");
while(getchar()!='\n')
continue;
}
while(getchar()!='\n')
continue;
shu[i].score=chengji;
i++;
}
return
i;
}
int
uninque(struct
STUDENT
shu[],int
len,int
xuehao)
{
int
i;
int
bank=0;
for
(i=0;i<len;i++)
{
if(xuehao==shu[i].num)
bank=1;
}
return
bank;
}
void
shuchu(struct
STUDENT
shu[],int
len)
{
int
i;
printf("%-4s
%-10s
%-3s","學號","姓名","成績\n\n");
for(i=0;i<len;i++)
{
printf("%-4d
%-10s
%-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
}
printf("\n\n");
}
void
send(struct
STUDENT
shu[],int
len)
{
int
i;
FILE
*fp;
fp=fopen("d:\\chegnji.txt","wb");
if(fp==NULL)
{
printf("打開文件出錯!\n");
exit(0);
}
for(i=0;i<len;i++)
fwrite(shu+i,sizeof(struct
STUDENT),1,fp);
fclose(fp);
}
int
readFromFile(struct
STUDENT
shu[])
{
FILE
*fp=NULL;
int
i=0;
fp=fopen("d:\\chegnji.txt","rb");
if(fp!=NULL)
{
printf("%-4s
%-10s
%-3s","學號","姓名","成績\n\n");
while(!feof(fp))
{
if(i>=N)
break;
if(fread(shu+i,sizeof(struct
STUDENT),1,fp))
printf("%-4d
%-10s
%-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
i++;
}
fclose(fp);
}
i=i-1;
return
i;
}
void
chaxun(struct
STUDENT
shu[],int
len)
{
int
i,nue,b=0;
while(1)
{printf("input
the
student
number
(input'0'
close)
");
scanf("%d",&nue);
b=0;
if(nue==0)
break;
for
(i=0;i<len;i++)
{
if(nue==shu[i].num)
{
printf("%-4s
%-10s
%-3s","學號","姓名","成績\n\n");
printf("%-4d
%-10s
%-3d\n",shu[i].num,shu[i].name,shu[i].score);
b=1;
}
}
if(b==0)
printf("The
number
is
not
exist!\n");
}
}
void
paixu(struct
STUDENT
shu[],int
len)
{
int
i,j;
struct
STUDENT
temp;
printf("%-4s
%-10s
%-3s","學號","姓名","成績\n\n");
for(i=0;i<len;i++)
{
for(j=i;j<len;j++)
{
if(shu[j].score>shu[i].score)
{
temp=shu[j];
shu[j]=shu[i];
shu[i]=temp;
}
}
printf("%-4d
%-10s
%-3d\n",shu[i].num,shu[i].name,shu[i].score);
}
}