㈠ 求簡單一點的學生成績管理系統源代碼,謝謝
已經算是很簡單的了
#include <time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 80
void input();
void sort();
void average();
void find();
void total();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float sum;
};
struct student stu[MAX],*p;
void main()/*主函數*/
{
int as;
/*一下為功能選擇模塊*/
do
{
printf("\n\t\t\t歡迎使用學生成績管理系統\n");
printf("\n\t\t\t\t1.信息輸入(INPUT)\n\t\t\t\t2.總分統計(COUNT)\n\t\t\t\t3.總分排序(SORT)\n\t\t\t\t4.查詢(QUERY)\n");
printf("\t\t\t\t選擇功能選項:");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case 1:system("cls");input();break;
case 2:system("cls");total();break;
case 3:system("cls");sort();break;
case 4:system("cls");find();break;
default:break;
}
}while(1);
/*至此功能選擇結束*/
}
void input()/*原始數據錄入模塊*/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.錄入學員信息\n輸入第%d個學員的信息\n",i+1);
printf("\n輸入學生學號:");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n輸入學員姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[i].sex);
printf("\n輸入學員成績(FOX):");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n輸入學員成績(C):");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n輸入學員成績(ENGLISH):");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
printf("是否繼續輸入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void sort()/*排序數據函數*/
{
struct student temp;
int i,j;
char as;
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
}
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].sum<stu[j].sum)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
do{
for(i=0;i<now_no;i++)
{
printf("\t\t\t班級學員信息列表\n");
printf("\t學號\t姓名\t性別\tFOX成績\tC成績\tENG成績\t總分\n");
for(i=0;i<now_no&&stu[i].name[0];i++)
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum);
}
printf("\t\t按任意鍵返回主菜單.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void find()/*查詢函數*/
{
int i,str;
char as;
do
{
printf("輸入要查詢的學生學號:");
fflush(stdin);
scanf("%d",&str);
for(i=0;i<now_no;i++)
if(stu[i].no==str)
{
printf("\t學號\t姓名\t性別\tFOX成績\tC成績\tENG成績\n");
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3);
}
printf("\t\t按任意鍵返回主菜單.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void total()/*求總分*/
{
int i;
char as;
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
}
do{
for(i=0;i<now_no;i++)
{
printf("\t\t\t班級學員信息列表\n");
printf("\t學號\t姓名\t性別\tFOX成績\tC成績\tENG成績\t總分\n");
for(i=0;i<now_no&&stu[i].name[0];i++)
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum);
}
printf("\t\t按任意鍵返回主菜單.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
㈡ 求C語言源代碼 題目 學生成績管理系統
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{ #define UP 72
#define DOWN 80
#define INSERT 82
#define DEL 83
#define ENTER 28
#define KEY 12
#define KEY 23
#define KEY 34
#define KEY 45
#define KEY A 30
#define KEY B 48
#define KEY C 46
#define KEY D 32
#define KEY E 18
#define KEY F 33
#define KEY G 34
#define KEY H 35
#define KEY I 23
#define KEY K 37
#define KEY L 38
#define KEY M 50
#define KEY N 49
#define KEY O 24
#define KEY P 25
#define KEY Q 16
#define KEY R 19
#define KEY S 31
#define KEY T 20
#define KEY U 22
#define KEY V 47
#define KEY W 17
#define KEY X 45
#define KEY Y 21
#define KEY Z 44
#define ALT F2 105
#define ALT F6 109
#define CTRL 4
#define SHIFT 1
#define ESC 1
#define BACKSPACE 14
#define LEN sizeof(struct student)
/*菜單選項。下拉標志*/答神
int menu x yes=1;
int menu y yes=0;
int menu x=1;
int menu x old=0;
int menu y1=1, menu y3=1;
/*保存文件名*/
char filename[43]="NONAME.dat";
/*開純銀辟保存數據的空間*/
void *buf=0;
int left,top,right,bottom;
/*開辟保存數據的空間*/
struct student
{ long num;
char name[15];
float h maths;
float english;
float c;
float sum;
int s sum;
struct student*next;
};
struct student*head=0,*p1,*p2;
int record n;
char key buf[50];
long student number=0;
char student name[13];
float student score=0;
/*讀鍵掃描碼做舉宴*/
char get key(void)
{ AH=0; int (0X16); return( AH); }
/*顯示字元*/
void show char(char z)
{ AL=z; AH=0x0e; int (0x10);}
/*測試是否有鍵輸入*/
int key pressed(void)
{ AH=0x0b; int (0x21); if( AL==0) return(0); else return(1);}
/*退出程序*/
voidquit(void)
{ void free data(void);void restore menu(void); free data();
restore menu(); window(1,1,80,25,0x0f);
cur show(); gotoxy(1,1); exit(1);
}
/*回到dos提示符*/
void os shell(void)
{void mainmenu show(void);
window(1,1,80,25,0x0f);
cur show(); gotoxy(1,1); system("");
mainmenu show();
}
/*主窗口文字*/
void main menu 1(void)
{ int i,j; char*p;
char*mainmenu word[]={"File ","Save ","Options ","About me"};
if(menu x!=menu x old||!menu y yes)
{p=mainmenu word[0];
putstr(4,1,0x70,p,35);
for(i=0;i<35;i++) if(*p++<='Z') putchar(i+4,1,*(p-1),0x74);
p=mianmenu word[0];
if(menu x yes)
for(i=0;j=0;i<35;i++)
{it('A'<=*p&&*(p+1)=='')break;
putchar(i+4,1,*p,0x0f); }
p++; }
}
}
void main menu 2(void)
{ int i; int len; char *p;
char*mainmenu word[6]={"F1-Help","F2-Save","F5-OS shell","F10-Menu","Message"};
void main box(void); main box();
p=mainmenu word[0]; putstr(2,25,0x70,p,42);
for(i=0;i<42;i++) {if(*p=='F'||('0'<=*p&&*p<='9'))putchar(i+2,*p,0x74); p++; }
p=mainmenu word[4]; putstr(36,22,0x17,p,9); len=strlen(filename);
putchar(40-len/2-1,2,'',0x17);
for(p=filename,i=0;*p!=0;p++;i++) putchar(40-len/2+i,2,*p,0x17);
putchar(40-len/2+len,2,'',0x17);
}
/*主窗口線框*/
void main box(void)
{ int i;
for(i=1;i<=80;I++) {putchar(i,2,205,0x17); putchar(i,22,196,0x17);putchar(i,24,196,0x17);}
for(i=1;i<=80;i++) {putchar(1,i,179,0x17); putchar(80,i,179,0x17); }
putchar(1,2,213,0x17); putchar(80,2,184,0x17); putchar(1,22,195,0x17);
putchar(80,22,180,0x17); putchar(1,24,192,0x17); putchar(80,24,217,0x17);
}
/*顯示主窗口菜單*/
voidmianmenu show (void)
{ textmode set(); cur hide();
window(1,1,80,25,0x1e);
window(1,1,80,1,0x70);
window(1,25,80,25,0x70);
main menu 10; main menu 20;
}
/*顯示下拉菜單*/
void menu show (void)
{ int i;
char*submenu word[][5]={{"New file F4","Open file F3","OS shell F5","Quit Alt-X"},
p"Input F6","Delete F8","Update F9","query F11","Sort F12"}};
switch(menu x)
{case 1:
if(menu x!=menu x old)
{menu x old=menu x; menu window(3,2,18,8); menu box(3,2,18,8,3,0);}
for(i=0;i<2;i++)
{putstr(4,3+i,0x70,submenu word[0][i],14);
putchar(5,3+i,*(submenu word[0][i]+1),0x74); }
for(i=3;i<5;i++) putstr(4,3+i,0x7-,submenu word[0][i-1],14);
putchar(6,6,*(submenu word[0][2]+2),0x74);
putchar(5,7,*(submenu word[0][3]+1),0x74);
window(4,2+menu y1,17,2+menu y1,0x0f);
if(menu y1<=2)
putstr(4,2+menu y1,0x0f,submenu word[0][menu y1-1],14);
else
putstr(4,2+menu y1,0x0f,submenu word[0][menu y1-2],14); break;
case 2:menu x old=menu x; menu window(19,2,44,8);}
for(i=0;i<5;i++)
{putstr(20,3+i,0x70,submenu word[1][i],24);
putchar(21,3+i,*(submenu word[1][i]+1,0x74); }
window(20,2+menu y3,43,2+menu y3,0x0f);
putstr(20,2+menu y3,0x0f,submenu word[1][menu y3-1],24); break;
case 4:menu x old=menu x; }
}
/*清空鍵盤緩沖*/
void clr buf(void){ key buf[1]=0;}
void free data(void)
{ struct student*pa,*pb;
if(head)
{pb=pa=head;
do{ pb=pa; pa=pb->next; free(pb);}while(pa!=0);head=0; }
}
/*姓名處理*/
int string name(void)
{ int i,j;
if(key buf[1]==0) return(0);
for(i=2,j=0;i<=key buf[1]+1;i++;j++)
student name[j]='\0'; return(1);}
/*輸入數據*/
voidinput(int flag)
{ int i; char*s1="NO. Name H maths English C\\C++ ";
char*s2=" | | | | ";
char*title="INPUT"; menu window(15,10,64,14); window(17,12,62,12,0x17);
putstr(37,10,0x70,title,7); putstr(17,11,0x70,s1,46);
if(head==0)
{ head=p1=p2=(struct student*)malloc(LEN);if(!head)memory error();
p1->next=0;
else{
for(p1=head,record n=0;p1!=0;record n++)
{ p2=p1; p1=p2->next; }
p1=(struct student*)malloc(LEN);
if(!p1)memory error();
p2->next=p1; }
while(1)
{record n++; putstr(17,12,0x07,s2,46);
if(flag==1)
{gotoxy(52,13); printf("Record%d",record n); }
do{ window(17,12,26,12,0x07);
if(!getstring(17,12,10))goto out ;
}while(!getstring number());
p1->num=student number;
do{ if(!getstring(28,12,12)) goto out;
}while(!string name());
strcpy(pi->name,student name);
for(i=1;i<=3;i++)
{ do{ window(41+(i-1)*8,12,0x07);
if(!getstring(41+(i-1)*8,12,5)) gotoout;
}while(!string score());
if(i==1)p1->h maths=student score;
if(i==2)pi->english=student score;
if(i==3)p1->c=student score; }
p1->sum=0.0; p1->s num=0;
if(flag==2){record n--;goto out;}
p2=p1;
p1=(struct student*)malloc(LEN);
if(!p1)memory error();
p1->next=0; p2->next=p1; }
out: cur hide(); window(15,10,65,15,0x1e);
if(flag==1) {if(head==p1)head=0; free(p1); p2->next=0; info(1); record n--; }
menu x yes=1; main menu 1();
}
/*查看是否有該成績*/
struct student* search(int flag)
{ struct student8pa,*pb; if(head==0)return(0); pb=pa=head;
if(flag==1)
{if(head->num==student number) return(head-1);
do{ if(pa->num==student number) return(pb);
pb=pa; pa=pb->next;} while(pa!=0); }
return (0);
}
/*查詢,刪除,修改對話框*/
struct student*msg box(int which)
{ int flag; int key; char*p="<-A B->"; menu window(22,10,60,14); gotoxy(29,11);
printf("Number OR Name"); window(24,12,58,12,0x07); gotoxy(24,12);
printf(" | "); gotoxy(37,10);
switch(which)
{ case 1:printf("Delete");break;
case 2:printf("Update");break;
case 3:printf("Query");break; }
do{ while(!key pressed())
now time();
key=get key(); if(key==KEY A) {flag=1;break;}
if(key==KEY B) {flag=2;break;} printf("\07");
}while(1);
putstr(37,13,0x64,p,7);
if(flag==1)
{ do{
gotoxy(24,12); printf(" | "):
if(!getstring(24,12,10)) goto out;
}while(!string number());
window(22,10,61,15,0x1e); return(search(1)); }
else
{do{ gotoxy(24,12); printf(" | ");
if(!getstring(41,12,12)) goto out;
}while(!string name());
window(22,10,61,15,0x1e); return(0);}
/*刪除記錄*/
void delete(void)
{ struct student*pa,*pb; pb=msg box(1); if(pb==0)info(3);
else
{ if(pb==(head-1))
{ pb=head; if(pb->next==0) head=0;
else head=pb->next; }
else
{ if(pb->next->next==0) {pb->next=pa; } }
record n--; info(2); }}
/*刪除記錄*/
void update(void)
{int i; struct student*p; i=record n; p=msg box(2;
if(p==0)info(3);
else
{ input(2);
if(i==record n)
{if(p==(head-1)){
head->num=p1->num; strcpy(head->name,p1->name);
head->h maths=p1->h maths; head->english=p1->english;
head->c=p1->c; free(p1); p2->next=0; }
else { p->next->num=p1->num; strcpy(p->next->name,p1->name);
p->next->h maths=p1->h maths; p->next->english=p1->english;
p->next->c=p1->c; free(p1); p2->next=0; }
info(4); }
else {record n--;p2->next=0;free(p1);info(5);} }}
/*查詢成績*/
void query(void)
{ struct student*p,*pa,*pb; int key ,flag,i,j;
char*str="NO. Name H matns English C\\C++ Sum S NO.";
char*sm="NO. Name h maths English C\\C++ (who fails)";
menu window(26,10,56,12); gotoxy(28,11); printf("Find Fail");
putchar(33,11,'A',0xe4); putchar(49,11,'B',0xe4);
do{if(!key pressed()) now time();
key=get key();
if(key==KEY A){flag=1;break;}
if(key==KEY B){flag=2;break;}
printf("\07"); }while(1);
window(26,10,57,13,0x1e); if(flag==1)
{ p=msg box(3); if(p==0) info(3);
else{window(6,5,76,21,0x0e); window(5,4,75,20,0x5e); window(6,5,74,19,0x0e);
putstr(13,4,0x5a,str,58); gotoxy(6,6);
if(p!=(head-1)){pa=p->next;p=pa;}
else p=head;
printf("%101d%13s%8.1f%9.1f%9.1f%9.1f%6d\n",\
p->num,p->name,p->h maths,p->english,p->c,p->sum,p->s sum);
}}
if(flag==2)
{ window(6,5,76,21,0x0e);window(5,4,75,20,0x5e); window(6,5,74,19,0x0e);
putchar(13,4,0x5a,sm,59); if(head)
{ pa=head; j=0;
do{ j++; i=0; window(6,5,74,19,0x0e); gotoxy(65,20);
printf("Page%d",j);
do
{ if(pa->c<60||pa->h maths<60||pa->english<60)
{gotoxy(6,6+i); i++;
printf("%101d%13s%8.1f%9.1f%9.1f%9.1f%6d\n",\
p->num,p->name,p->h maths,p->english,p->c,p->sum,p->s sum);}
pb=pa; pa=pb->next; }while(i!=13&&pa!=0);
while(!key pressed()) now time();
get key(); }while(pa!=0);
goto out;}}
while(!key pressed())
now time();get key();
out:window(5,4,76,21,0x1e);}
/*成績排名*/
void sort(void)
{ int i,j,n,flag; struct student*pa=0,*pb=0;
struct student*p[500],*pmin;
char*str="NO. Name H maths English C\\C++ Sum S NO.";
window(6,5,76,21,0x0e); window(5,4,75,20,0x5e); window(6,5,74,19,0x0e);
putstr(13,4,0x5a,str,58); window(60,20,73,20,0x5b);
if(head!=0)
{ i=0; pb=pa=head;
do
{p[i]=pa; i++; pa->sum=pa->h maths+pa->english+pa->c;
pb=pa; pa=pb->next; }while(pa!=0);
for(n=record n-1,i=0;i<n;i++)
{ flag=0;
for(j=0;j<n-i;j++)
if(p[j]->sum<p[j+1]->sum)
{ pmin=p[j]; p[j]=p[j+1]; p[j+1]=pmin; flag=1; }
if(flag==0)break; }
head=pb=pa=p[0]; head->s sum=1;
if(record n>1)
for(i=1;i<record n;i++) { pa->s sum=i; pb=pa; pa=pb->next=p[i];}
p2=p1=p[record n-1]; p1->s sum=record n;
p1->next=0; pb=pa=head;
j=0;
do{
j++;i=0; window(6,5,74,19,0x0e); gotoxy(65,20); printf("Page%d",j);
do
{gotoxy(6,6+i); i++;
printf("%101d%13s%8.1f%9.1f%9.1f%9.1f%6d\n",\
p->num,p->name,p->h maths,p->english,p->c,p->sum,p->s sum);}
pb=pa; pa=pb->next; }while(i!=13&&pa!=0);
while(!key pressed()) now time();
get key(); }while(pa!=0);
goto out;}
while(!key pressed())
now time();get key();
out:window(5,4,76,21,0x1e);}
/*輸入文件名*/
int input filename(int m)
{ char*p; int fp; menu window(19,10,64,12);
window(20,11,63,11,0x07);
gotoxy(35,10); printf("File name");
if(!getstring(20,11,40)) goto no;
if(key buf[1]==0) goto no;
p=key buf+2; key buf[key buf[1]+2]='\0';
if(fp=fopen(p,"rb+"))==0)
{if(m==2) goto no; if(fp=fopen(p,"wb+"))==0 goto no; }
fclose(fp); strcpy(filename,p);
yes: window(19,10,65,13,0x1e);
return(1);
no: window(19,10,65,13,0x1e);
return(0);
}
/*新建文件*/
void new file(void)
{ int fp;
if(input filename(1)==0) info(9;
else
{main menu 2(); free data(); fp=fopen(filename,"wb+"); fclose(fp); info(10); }
}
/*打開文件*/
void open file(void)
{ struct student*pa,*pb; int fp;
if(input filename(2)==0)info(6);
else
{free data(); head=pb=pa=(struct student*)malloc(LEN); fp=fopen(filename,"rb+";
fread(&pa->num,LEN,1,fp);}
info(8); fclose(fp); input(1); }}
/*保存文件*/
void save fiel(void)
{ struct student8pa,*pb; int fp;
if((fp=fopen(filename,"rb+"))==0) fp=fopen(filename,"wb+");
pb=pa=head;
if(fp!=0&&head!=0)
{do{fwrite(&pa->num,LEN,1,fp); pb=pa; pa=pb->next;}while(pa!=0);
fclose(fp); }
info(7);
}
void about me(void)
{ int i; char*title="About Me"; char*str[]={" I'M A BIG.BIG WORLD. "};
menu window(20,5,58,18); putstr(35,5,0x70,title,10);
for(i=0;i<12;i++)putstr(25,6+i,0x75,str[i],29);
while(!key pressed()) now time();
get key(); window(20,5,59,19,0x1e);
}
system("PAUSE");
return EXIT_SUCCESS;
}
㈢ 學生成績管理系統,C++源代碼
#include<iostream>
#include<string>
#include <fstream>
#include<sstream>
#include<iomanip>
using namespace std;
//結點類,用於存放學生的各種數據
class Node{
public:
int id; //學號
string name; //姓名
string grade; //等級
double english; //英語
double math; //數學
double c; //C++
double sum; //總分
double average;
Node *next; //指向下一結點的指針
Node(int nid=0,string nname="noname", //構造函數,初始化變數
double e=0,double m=0,double cl=0,
double s=0 ,double a=0,string g="ng");
};
Node::Node(int nid,string nname,double e,double m,double cl,double s,double a,string g){
id=nid;
name=nname;
next=NULL;
english=e;
math=m;
c=cl;
sum=s;
average=a;
grade=g;
}
//class NOde結束
//Link類,把數據以鏈表的形式存儲,鏈表的每個結點為一個Node對象
class Link{
private:
Node *head; //鏈表的頭指針,為Node對象類型的指
public :
Link();//構造函數,初始化變數
bool linkIsEmpty();//判斷鏈表是否為空
void linkInsert(Node *newnode);//向鏈表中插入新的結點
bool linkDelete(int nid);//從鏈表中刪除的結點
void linkClear();//清空鏈表中數據
void linkView();//查看鏈表中數據
void linkGrade(Node *p1);//計算等級
void linkAverageTotle();//按平均分統計
Node* linkFind(int nid);//在鏈表中查找id為nid結點,返回指向該結點的指針
Node* getHead();//獲取頭指針
};
Link::Link(){ //構造函數,初始化鏈表為空
head=NULL;
}
bool Link::linkIsEmpty(){ //判斷鏈表是否為空,空則返回true
return(head==NULL);
}
void Link::linkInsert(Node *newnode){//按id值從小到大的順序,插入新的結點
Node *p1;
if(!head)//鏈表為空的情況
head=newnode;
else if((head->id)>(newnode->id)){//插入到第一個結點的情況
newnode->next=head;
head=newnode;
}
else{//插入到第二個及以後情況
p1=head;
while(1){
if(!(p1->next)){
p1->next=newnode;
break;
}
else if((p1->next)->id>newnode->id){
newnode->next=p1->next;
p1->next=newnode;
break;
}
p1=p1->next;
}
}
}
bool Link::linkDelete(int nid){//刪除結點,成功則返回true
Node *p;
if(head==NULL)//鏈表為空的情況
return false;
if(head->id==nid){//刪除的為第一個結點的情況
head=head->next;
return true;
}
p=head;
while(p->next){//刪除的為第二個及以後結點的情況
if((p->next)->id==nid){
p->next=(p->next)->next;
return true;
}
p=p->next;
}
return false;
}
void Link::linkClear(){//清空鏈表
head=NULL;
}
void Link::linkView(){//顯示鏈表數據
Node *p=head;
cout<<setw(10)<<"學號"<<setw(8)<<"姓名"<<setw(8)<<"英語"<<setw(8)
<<"數學"<<setw(8)<<"C++"<<setw(8)<<"總分"<<setw(8)<<"平均分"<<setw(8)<<"等級"<<endl;
while(p){
(p->sum)=(p->english)+(p->math)+(p->c);//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;//計算平均成績
linkGrade(p);//計算等級
cout<<setw(10)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english
<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)
<<p->average<<setw(8)<<p->grade<<endl;
p=p->next;
}
}
void Link::linkGrade(Node *p1){ // 計算等級
while(p1){
if(p1->average>=90&&p1->average<=100)
p1->grade="優";
else if(p1->average>=80&&p1->average<90)
p1->grade="良好";
else if(p1->average>=70&&p1->average<80)
p1->grade="中等";
else if(p1->average>=60&&p1->average<=70)
p1->grade="合格";
else
p1->grade="不合格";
p1=p1->next;
}
}
void Link::linkAverageTotle(){//按學生平均分統計
int a=0,b=0,c=0,d=0,e=0,f=0;
double averagesum=0,asum=0,aaverage=0,paverage=0;
Node *p3=head;
while(p3){
if(p3->average>=90&&p3->average<=100)
a+=1;
else if(p3->average>=80&&p3->average<90)
b+=1;
else if(p3->average>=70&&p3->average<80)
c+=1;
else if(p3->average>=60&&p3->average<70)
d+=1;
else
e+=1;
asum+=p3->sum;
aaverage+=p3->average;
p3=p3->next;
}
f=a+b+c+d+e;
averagesum=asum/f;
paverage=aaverage/f;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 總 人 數:"<<f<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 優 人 數:"<<a<<" | "<<"優 秀 率: "<<a*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 良 好 的人數:"<<b<<" | "<<"良 好 率: "<<b*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 中 等 的人數:"<<c<<" | "<<"中 等 率: "<<c*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 所有合格人數:"<<a+b+c+d<<" | "<<"合 格 率: "<<(a+b+c+d)*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 不 合 格 數:"<<e<<" | "<<"不合格率: "<<e*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 總分的平均分:"<<averagesum<<" | "<<"所有科目的平均分:"<<paverage<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
}
Node* Link::linkFind(int nid){//查找id值為nid的結點,返回該結點的指針
Node *p=head; //沒找到符合條件的結點的話,返回的指針值為NULL
while(p){
if(p->id==nid)
break;
else
p=p->next;
}
return p;
}
Node* Link::getHead(){
return head;
}
//class Link 結束
//類Student,用於包裝Link類及菜單操作
class Student{
private:
Link slink;//Link對象成員
bool k;//記錄數據是否被修改
public:
Student();
void studentClear();
void studentInsert();
void studentDelete();
void studentFind();
void studentView();
void studentLoad();
void studentSave();
void studentAverageTotle();//按平均分數統計等級
void Exit();//退出程序
void showMenu();//顯示菜單
void showTip();//顯示操作提示
void doMenu(char n);//執行相應菜單項功能
};
Student::Student(){
Link();//調用成員對象的構造函數
studentLoad();//從文件中讀取數據,創建鏈表
k=false;//設置數據被修改
}
void Student::studentClear(){//清空學生記錄
slink.linkClear();
cout<<"成功清空學生記錄!"<<endl;
}
void Student::studentInsert(){//插入學生記錄
Node *p=new Node();
cout<<"請輸入學號:";
cin>>p->id;
cout<<"請輸入姓名:";
cin>>p->name;
if(!slink.linkFind(p->id)){//判斷學號是否存在
slink.linkInsert(p);
k=true;
}
else
cout<<"學號為"<<p->id<<"的學生已存在,插入失敗!"<<endl;
cout<<"請輸入成績:"<<endl;
cout<<"英語:";
cin>>p->english;
cout<<endl;
cout<<"數學:";
cin>>p->math;
cout<<endl;
cout<<"C++:";
cin>>p->c;
cout<<endl;
(p->sum)=(p->english)+(p->math)+(p->c);//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;//計算平均成績
}
void Student::studentDelete(){//刪除學生記錄
int i;
if(slink.linkIsEmpty())//鏈表為空的情況
cout<<"沒有學生記錄!"<<endl;
else{
cout<<"請輸入學號:";
cin>>i;
if(slink.linkDelete(i)){
cout<<"成功刪除學號為"<<i<<"的學生記錄!"<<endl;
k=true;
}
else
cout<<"沒有找到學號為"<<i<<"的學生!"<<endl;
}
}
void Student::studentFind(){//查找某學號的學生記錄
int n;
Node *p;
if(slink.linkIsEmpty())//鏈表為空的情況
cout<<"沒有學生記錄!"<<endl;
else{
cout<<"請輸入要查找的學號:";
cin>>n;
p=slink.linkFind(n);//獲得找到的結點的指針
if(p){//指針值不為NULL時
(p->sum)=(p->english)+(p->math)+(p->c);//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;//計算平均成績
slink.linkGrade(p);
cout<<setw(6)<<"學號"<<setw(8)<<"姓名"<<setw(8)<<"英語"
<<setw(8)<<"數學"<<setw(8)<<"C++"<<setw(8)<<"總分"<<setw(8)
<<"平均分"<<setw(8)<<"等級"<<endl;
cout<<setw(6)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english
<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average
<<setw(8)<<p->grade<<endl;
}
else//指針值為NULL時
cout<<"沒有找到學號為"<<n<<"的學生記錄!"<<endl;
}
}
void Student::studentView(){//顯示所有學生的記錄
if(slink.linkIsEmpty())
cout<<"沒有學生記錄!"<<endl;
else
slink.linkView();
}
void Student::studentLoad(){//從文件中讀入數據,創建鏈表
Node *p;
int nid;
ifstream infile("data.txt");
if(!infile)
cerr<<"錯誤:數據文件不能打開!\n";
else
while(infile>>nid){//讀取學號,直到讀空
p=new Node();
p->id=nid;
infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade;//讀取姓名
slink.linkInsert(p);
}
infile.close(); //關閉文件
}
void Student::studentSave(){//將數據保存到文件
Node *p=slink.getHead();
ofstream outfile("data.txt");
if(!outfile)
cerr<<"錯誤:數據文件不能打開!\n";
else{
while(p){
outfile<<p->id<<' '<<p->name<<' '<<p->english<<' '<<p->math<<' '
<<p->c<<' '<<p->sum<<' '<<p->average<<' '<<p->grade<<endl;
p=p->next;
}
k=false;
cout<<"保存成功!"<<endl;
}
}
void Student::studentAverageTotle(){
if(slink.linkIsEmpty())
cout<<"沒有學生記錄!"<<endl;
else
slink.linkAverageTotle();
}
void Student::Exit(){
char s='Y';
if(k){//判斷數據是否修改
cout<<"數據已經改變,是否保存?(y/n):";
cin>>s;
if(s=='y'||s=='Y')
studentSave();
}
cout<<"已安全退出,";
system("pause");
exit(0);
}
void Student::showMenu(){
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 學生信息管理系統 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 1. 清空:清除所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 2. 添加:插入一條學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 3. 刪除:刪除指定學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 4. 查找:查找指定學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 5. 顯示:顯示所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 6. 保存:保存所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 7. 統計:按學生平均分統計 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 0. 退出:安全的退出本系統 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl<<endl;
}
void Student::showTip(){
cout<<endl;
cout<<"-------------------操作完成---------------------"<<endl;
cout<<"-----------------選擇0-7繼續-------------------"<<endl;
cout<<"請選擇:";
}
void Student::doMenu(char n){
switch(n){
case '1':
studentClear();break;
case '2':
studentInsert();break;
case '4':
studentFind();break;
case '3':
studentDelete();break;
case '5':
studentView();break;
case '6':
studentSave();break;
case '7':
studentAverageTotle();break;
case '0':
Exit();break;
default:cout<<"輸入錯誤!";
}
}
int main(){
Student s;
char i='9';
s.showMenu();
cout<<"選擇對應數字進行操作:";
while(1){
cin>>i;
system("cls"); //清除屏幕
s.showMenu();
s.doMenu(i);
s.showTip();
}
return 0;}
㈣ 求學生成績管理系統的源代碼
#include<stdio.h>
#include<stdlib.h>
#defineFILENAME"student.dat"
typedefenum{MAN,WOMAN}SEX;
typedefstructtagStudent
{
intnum; //學生的編號
charname[20]; //學生的姓名
SEX sex; //學生的性別
intage; //學生的年齡
charmajor[20]; //學生的專業
structtagStudent*next;//下一個節點的指針
}STUDENT,*PSTUDENT;
STUDENTg_head; //頭節點
//1.顯示菜單
voidShowMenu();
//2.獲取用戶選擇的菜單的編號
intGetMenuChoose();
//3.創建一個節點,它會返回一個新創建的學生信息節點的指針
PSTUDENTCreateStudent();
//4.把學生信息節點加入到鏈表中
intAddStudent(PSTUDENTpstu);
//5.返回指定編號學生節點的上一個節點的指針
PSTUDENTGetPrevAddr(intnum);
//6.顯示所有學生信息
voidShowAll();
//7.顯示信息數量
intShowStudentCount();
//8.修改學生信息,參數為要修改的學生的編號
voidModityStudent(intnum);
//9.獲取用戶的選擇
intQuestion(constchar*pstr);
//10.獲取用戶輸入的學生的編號
intGetInputNum();
//11.刪除編號為num的學生信息
voidDelStudent(intnum);
//12.刪除所有的學生信息
voidDelAll();
//13.把學生信息保存到文件當中
voidSaveToFile();
//14.從文件中讀取學生信息
voidLoadFromFile();
intmain()
{
intrunning=1;
while(running)
{
switch(GetMenuChoose())
{
case0:
running=0;
break;
case1:
// printf("你選擇了菜單1 ");
AddStudent(CreateStudent());
break;
case2:
// printf("你選擇了菜單2 ");
DelStudent(GetInputNum());
break;
case3:
printf("你選擇了菜單3 ");
break;
case4:
// printf("你選擇了菜單4 ");
ModityStudent(GetInputNum());
break;
case5:
// printf("你選擇了菜單5 ");
DelAll();
break;
case6:
// printf("你選擇了菜單6 ");
ShowAll();
break;
case7:
// printf("你選擇了菜單7 ");
ShowStudentCount();
break;
case8:
// printf("你選擇了菜單8 ");
LoadFromFile();
break;
case9:
// printf("你選擇了菜單9 ");
SaveToFile();
break;
}
system("pause");
}
return0;
}
//1.顯示菜單
voidShowMenu()
{
system("cls");
printf("-----------------------------學生管理系統-------------------------------- ");
printf(" 1.添加學生信息2.刪除某個學生信息3.顯示某個學生信息 ");
printf(" 4.修改學生信息5.刪除所有學生信息6.顯示所有學生信息 ");
printf(" 7.顯示信息數量8.讀取文件學生信息9.保存學生信息至文件 ");
printf(" 0.退出系統 ");
printf(" ------------------------------------------------------------------------- ");
}
//2.獲取用戶選擇的菜單的編號
intGetMenuChoose()
{
intnum;//保存用戶選擇的菜單編號
ShowMenu();
printf("請選擇菜單(0~9):");
while(1!=scanf("%d",&num)||num<0||num>9)
{
ShowMenu();
printf("選擇菜單錯誤,請重新選擇(0~9):");
fflush(stdin);//清空輸入緩沖區
}
returnnum;
}
//3.創建一個節點,它會返回一個新創建的學生信息節點的指針
PSTUDENTCreateStudent()
{
intsex;
PSTUDENTpstu=(PSTUDENT)malloc(sizeof(STUDENT));//在堆內存申請空間,存儲學生信息
if(!pstu)
{
printf("申請內存空間失敗! ");
returnNULL;
}
printf("請輸入學生的編號(整型):");
while(1!=scanf("%d",&pstu->num)||GetPrevAddr(pstu->num))
{
printf("學生編號輸入錯誤或已經存在,請重新輸入學生的編號(整型):");
fflush(stdin);
}
printf("請輸入學生的姓名(小於20字元):");
scanf("%20s",pstu->name);//(*pstu).name
printf("請選擇學生的性別(1.男2.女):");
while(1!=scanf("%d",&sex)||sex<1||sex>2)
{
printf("性別選擇錯誤,請重新選擇學生的性別(1.男2.女):");
fflush(stdin);
}
if(1==sex)
pstu->sex=MAN;
else
pstu->sex=WOMAN;
printf("請輸入學生的年齡(10~40):");
while(1!=scanf("%d",&pstu->age)||pstu->age<10||pstu->age>40)
{
printf("年齡輸入錯誤!請重新輸入學生的年齡(10~40):");
fflush(stdin);
}
printf("請輸入學生的專業(小於20字元):");
scanf("%20s",pstu->major);
pstu->next=NULL;
returnpstu;
}
//4.把學生信息節點加入到鏈表中
intAddStudent(PSTUDENTpstu)
{
PSTUDENTps=&g_head;
if(!pstu)
{
return0;
}
//判斷一下該學生信息是不是已經存在
if(GetPrevAddr(pstu->num))
{
printf("編號為%d的學生信息已經存在! ",pstu->num);
free(pstu);//釋放該節點內存空間
return0;
}
//while循環的作用是找到當前鏈表的最後一個節點
while(ps->next)
ps=ps->next;
//把新節點加入到最後那個節點的後面
ps->next=pstu;
pstu->next=NULL;
return1;
}
//5.返回指定編號學生節點的上一個節點的指針
PSTUDENTGetPrevAddr(intnum)
{
PSTUDENTpstu=&g_head;
while(pstu->next)
{
if(pstu->next->num==num)
returnpstu;
pstu=pstu->next;
}
returnNULL;
}
//6.顯示所有學生信息
voidShowAll()
{
PSTUDENTpstu=&g_head;
printf("-------------------------------------------------------------------- ");
printf("編號姓名性別年齡專業 ");
printf("-------------------------------------------------------------------- ");
while(pstu->next)
{
printf("%-8d",pstu->next->num);
printf("%-20s",pstu->next->name);
printf("%-6s",pstu->next->sex==MAN?"男":"女");
printf("%4d",pstu->next->age);
printf("%20s ",pstu->next->major);
pstu=pstu->next;//讓指針指向下一個節點
}
printf("-------------------------------------------------------------------- ");
}
//7.顯示信息數量
intShowStudentCount()
{
intcount=0;
PSTUDENTpstu=&g_head;
while(pstu->next)
{
++count;
pstu=pstu->next;
}
printf(" 當前共有%d位學生信息。 ",count);
returncount;
}
//8.修改學生信息,參數為要修改的學生的編號
voidModityStudent(intnum)
{
PSTUDENTpstu=GetPrevAddr(num);//獲取要修改的學生節點的上一個節點
intchoose;
if(!pstu)
{
printf("沒有編號為%d的學生信息。 ",num);
return;
}
pstu=pstu->next;//將要修改的學員節點的指針改為指向自己的
printf("當前學生的姓名為%s,",pstu->name);
if(Question("確定要修改嗎?"))
{
printf("請輸入學生的姓名(小於20字元):");
scanf("%20s",pstu->name);
}
printf("當前學生的性別為%s,",pstu->sex==MAN?"男":"女");
if(Question("確定要修改嗎?"))
{
printf("請輸入學生的性別(1.男2.女):");
while(1!=scanf("%d",&choose)||choose<1||choose>2)
{
printf("輸入錯誤,請重新輸入學生的性別(1.男2.女):");
fflush(stdin);
}
if(1==choose)
pstu->sex=MAN;
else
pstu->sex=WOMAN;
}
printf("當前學生的年齡為%d,",pstu->age);
if(Question("確定要修改嗎?"))
{
printf("請輸入學生的年齡(10~40):");
while(1!=scanf("%d",&pstu->age)||pstu->age<10||pstu->age>40)
{
printf("年齡輸入錯誤!請重新輸入學生的年齡(10~40):");
fflush(stdin);
}
}
printf("當前學生的專業為%s,",pstu->major);
if(Question("確定要修改嗎?"))
{
printf("請輸入學生的專業(小於20字元):");
scanf("%20s",pstu->major);
}
printf("修改完畢! ");
}
//9.獲取用戶的選擇
intQuestion(constchar*pstr)
{
charanswer;
printf("%s請選擇(yorn):",pstr);
while(1!=scanf("%c",&answer)||(answer!='y'&&answer!='n'))
{
printf("輸入錯誤!%s請重新選擇(yorn):",pstr);
fflush(stdin);//清空輸入緩沖區,C庫函數
}
if('y'==answer)
return1;
else
return0;
}
//10.獲取用戶輸入的學生的編號
intGetInputNum()
{
intnum;
printf("請輸入學生的編號(整型):");
while(1!=scanf("%d",&num))
{
printf("編號輸入錯誤!請重新輸入學生的編號(整型):");
fflush(stdin);
}
returnnum;
}
//11.刪除編號為num的學生信息
voidDelStudent(intnum)
{
PSTUDENTpstu,ptmp;
if(pstu=GetPrevAddr(num))
{
if(!Question("確定要刪除該學生信息嗎?"))
{
return;
}
ptmp=pstu->next;
pstu->next=ptmp->next;
free(ptmp);
printf("刪除了編號為%d的學生信息。 ",num);
}
else
{
printf("沒有找到編號為%d的學生信息。 ",num);
}
}
//12.刪除所有的學生信息
voidDelAll()
{
PSTUDENTpstu=g_head.next,ptmp;
intcount=0;
if(!Question("確定要刪除當前所有的學生信息嗎?"))
{
return;
}
while(pstu)
{
ptmp=pstu;
pstu=pstu->next;
free(ptmp);
++count;
}
printf("共刪除了%d位學生信息。 ",count);
g_head.next=NULL;
}
//13.把學生信息保存到文件當中
voidSaveToFile()
{
FILE*pf=fopen(FILENAME,"wb");
PSTUDENTpstu=&g_head;
inti=0,count=ShowStudentCount();
if(!pf)
{
printf("打開待寫入的文件失敗! ");
return;
}
if(!Question("確定要將當前學生信息保存到文件中嗎?"))
{
fclose(pf);
return;
}
fwrite(&count,1,sizeof(count),pf);//把學生信息的數量先寫入到文件頭
while(pstu->next)
{
fwrite(pstu->next,1,sizeof(STUDENT),pf);//把每位學生信息寫入文件
++i;
pstu=pstu->next;
}
fclose(pf);
if(i==count)
{
printf("成功的寫入了%d條學生信息。 ",count);
}
else
{
printf("應寫入%d條學生信息,實際寫入%d條學生信息。 ",count,i);
}
}
//14.從文件中讀取學生信息
voidLoadFromFile()
{
inti,count=0,repeat=0;
FILE*pf;
PSTUDENTpstu;
printf("提示:從文件中讀取學生信息會詢問是否清空當前學生信息(不清空表示合並所有信息)。 ");
if((pf=fopen(FILENAME,"rb"))==NULL)
{
printf("文件還沒有創建,請手工輸入學生信息並保存吧! ");
return;
}
DelAll();//刪除之前的所有學生信息,然後從文件中讀取
fread(&count,1,sizeofcount,pf);//獲取學生信息的數量
for(i=0;i<count;++i)
{
pstu=(PSTUDENT)malloc(sizeof(STUDENT));
fread(pstu,1,sizeof(STUDENT),pf);
if(!AddStudent(pstu))
{
++repeat;//保持有多少個和當前鏈表中相重復的學生信息
}
}
fclose(pf);
printf("文件讀取完畢!新增學生信息%d條。 ",count-repeat);
}
這個累死我了,我要財富值。。。為了這個不容易啊
㈤ c語言學生成績管理系統1000行源代碼
/*首次使用,新建score.in文件,在裡面打入0
可用程序
#include<stdio.h>
FILE *fin
main()
{
fin=fopen("score.in","r");
fprintf(fin,"0");
return 0;
}
完成
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#define n 999
FILE *fin;
main()
{
int a[n]={0},ori=0,i=0,b=0,add[n]={0},con=0,orix[n]={0},t=0,te[n]={0},TRUEt,ixi,fx,abc=0,sum,TURE,xx;
long long f[n]={0},tex[n]={0};
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t學生成績管理系統\n\t\t\t\t\t\t Please wait...");
Sleep(2000);system("cls");
int xp,xi;
fin=fopen("score.in","r+");
fscanf(fin,"%d",&xp);
i=xp;
for(xi=1;xi<=xp;xi++)
{fscanf(fin,"%d%d%d",&f[xi],&a[xi],&te[xi]);te[xi]--;
printf("Id:%lld score:%d ranking:%d\n",f[xi],a[xi],te[xi]+1);
add[xi]=xi;orix[xi]=a[xi];
}
fclose(fin);
int TRUE1;
pe:
while(1)
{ TRUE1=1;i++;
printf("Id(輸入-1:刪除,輸入-2:修改成績,輸入-3:刪除所有內容,輸入-4:保存到score.in並退出):");
scanf("%lld",&f[i]);
for(sum=1;sum<i;sum++)
if(f[sum]==f[i])
{system("cls");for(con=1;con<=i;con++) {if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}TRUE1=0;i--;printf("Error with two same id.\n");continue;}
if(TRUE1==0)
continue;
if(f[i]==-3)
{int r;
for(r=0;r<n;r++)
{
a[r]=0;ori=0;i=0;b=0;add[r]=0;con=0;orix[r]=0;t=0;te[r]=0;abc=0;
f[r]=0;tex[r]=0;
}
system("cls");
goto pe;
}
if(f[i]==-2)
{TURE=0;i--;
system("cls");
for(con=1;con<=i;con++)
{if(a[con]==0)continue; printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("修改學號_____________號的分數.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",f[con],a[con],te[con]+1);
scanf("%d",&xx);
for(sum=1;sum<=i;sum++)
if(f[sum]==xx)
{
TURE=1;
printf("\n修改為___________.\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%d",&a[sum]);
printf("\n修改成功!將在下一次輸入後更新名次。\n\n");
continue;
}
if(TURE==0)
printf("No id is %d\n",xx);
continue;
}
if(f[i]==-4)
{
i--;
fin=fopen("score.in","r+");
fprintf(fin,"%d\n",i);
for(xi=1;xi<=i;xi++)fprintf(fin,"%d %d %d\n",f[xi],a[xi],te[xi]+1);
for(xi=i+1;xi<=xp;xi++)fprintf(fin," \n");
fclose(fin);
return 0;
}
if(f[i]==-1)
{TRUEt=0;
system("cls");
i--;
for(con=1;con<=i;con++){if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("刪除學號_____________號.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%lld",&fx);
for(con=1;con<=i;con++)
if(f[con]==fx)
{TRUEt=1;abc++;
f[con]=0;
a[con]=0;
tex[abc]=te[con];
for(ixi=1;ixi<=i;ixi++)
if(te[ixi]>te[con])
te[ixi]--;
te[con]=0;
break;}
system("cls");
for(con=1;con<=i;con++){
if(a[con]==0)continue;
printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
if(TRUE==0)
printf("No Id is %lld\n",fx);
continue;
}
system("cls");
for(con=1;con<i;con++)
{if(a[con]==0)continue; printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("Id:%lld score:",f[i]);
scanf("%d",&ori);system("cls");
a[i]=ori;add[i]=i;orix[i]=a[i];
system("cls");
for(b=1;b<=i;b++)
for(con=i;con>=b;con--)
if(orix[con]>orix[con-1])
{t=orix[con];orix[con]=orix[con-1];orix[con-1]=t;
t=add[con];add[con]=add[con-1];add[con-1]=t;}
for(con=1;con<=i;con++) te[add[con]]=con;
for(con=1;con<=abc;con++)
for(ixi=1;ixi<=i;ixi++)
if(te[ixi]>tex[con])
te[ixi]--;
if(te[i]==te[i-1])te[i]=0;
for(con=1;con<=i;con++)
{if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
}
return 0;
}
//求採納
㈥ 學生成績管理C語言程序設計源代碼
這個是我大一的時候寫的,你參考一下自己修改修改就能用了:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define PF printf
#define SF scanf
#define NUM_sub 4
#define SIZE 80
#define LEN sizeof(struct cj_statistic)
static int n=0;
int i=0;
struct cj_statistic
{
int num;
char name[15];
int score[NUM_sub];
int sum;
int aver_stu;
int aver_cour;
int index;
struct cj_statistic *next;
} stud[SIZE],temp;
void add();
void del();
void change();
void display();
void arrange();
void find();
void add()
{ FILE *fp;
float s1=0.0; int i; clrscr();
if((fp=fopen("xx.out","a"))==NULL)
{PF("磁碟已滿舉察!
");
getchar();
return;}
PF("
請輸入要添加的學生學號:");
SF("%d",&stud[n].num);
PF("
請輸入要添加的學生姓名:");
SF("%s",stud[n].name);
PF("
請輸入該學生的各科成績:");
s1=0;
for(i=0;i<NUM_sub;i++)
{
do
{
PF("score%d:",i+1);
SF("%d",&stud[n].score[i]);
if(stud[n].score[i]>100||stud[n].score[i]<0)
PF("wrong data,repeat input
");
}
while(stud[n].score[i]>100||stud[n].score[i]<0);
s1=s1+stud[n].score[i]; /*算總分*/
}
stud[n].sum=s1;
stud[n].aver_stu=(float)s1/NUM_sub;
stud[n].index=n+1;
getchar();
if(fwrite(&stud[n],LEN,1,fp)) n++;
fclose(fp);
}
void del()
{
int k, m;
FILE *fp;
clrscr();
fp=fopen("xx.out","r");
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("
請輸入要刪除的學號:");
SF("%d",&m);
getchar();
for(i=0;i<n;i++)
if(m==stud[i].num){k=1;break;}/*查找記錄*/
if(k==1)/*刪除記錄*/
{ for(k=i;k<n-1;k++)
{ strcpy(stud[k].name,stud[k+1].name);
敏虛 stud[k].num=stud[k+1].num;
for(i=0;i<NUM_sub;i++)
stud[k].score[i]=stud[k+1].score[i];
stud[k].sum=stud[k+1].sum;
stud[k].aver_stu=stud[k+1].aver_stu;
stud[k].index=stud[k+1].index;
} n--;PF("刪除成功!");
}
else
{
PF("找不到要刪除的記錄:
");
PF("按回車鍵返回:");
getchar();
正拿茄 }
fp=fopen("xx.out","a");/*打開新文件*/
for(i=0;i<n;i++)
fwrite(&stud[i],LEN,1,fp);/*寫入信息*/
fclose(fp);
}
void change()
{ int k,m;
FILE *fp;
clrscr();/*清屏*/
fp=fopen("xx.out","r");
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("
請輸入要修改的學生學號:");
SF("%d",&m);
getchar();
for(i=0;i<n;i++)
if(m==stud[i].num)
{k=1;break;}/*查找*/
if(k==1)/*開始修改*/
{ PF("
");
PF("
請輸入修改後的學生姓名:");
SF("%s",stud[i].name);
PF("
請輸入修改後的學生學號:");
SF("&d",&stud[i].num);
for(i=0;i<NUM_sub;i++)
{ PF("score%d:",i+1);
SF("%d",&stud[n].score[i]);}
}
else
{ PF("對不起,找不到要修改的記錄!
");
PF("按回車鍵返回:");
getchar();}
fp=fopen("xx.out","w");
for(i=0;i<n;i++)
fwrite(&stud[i],LEN,1,fp);/*寫入數據*/
fclose(fp);
}
void display() /*瀏覽全部學生信息*/
{ FILE *fp;
clrscr();/*清屏*/
fp=fopen("xx.out","r");
printf("
************************************STUDENT*************************************
");
printf("| 學號 | 姓名 | 英語 | 高數 | C語言 | 物理 | 總分 | 平均分 |名次|
");
printf("|--------|-----------|------|------|-------|--------|-------| -------|----|
");
for(i=0;i<n;i++)
{
fread(&stud[i],LEN,1,fp);/*讀一個輸出一個*/
PF("| %d | %s | %d | %d | %d | %d | %d | %d |
",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
stud[i].index);
}
PF("按任意鍵返回!");
fclose(fp);
getchar();
}
void arrange()
{
int k=0,j,sum1,sum2,sum3,sum4;
FILE *fp;
clrscr();
if((fp=fopen("xx.out","r"))==NULL)
{PF("磁碟已滿!
");
getchar();
return;}
for(i=0;i<n;i++)
{ for(j=0;j<n-i;j++)
if(stud[j].sum<stud[j+1].sum)
{temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp;} }
fwrite(&stud[i],LEN,1,fp);/*寫入數據*/
printf("
*********************************STUDENT******************************************
");
printf("| 學號 | 姓名 | 英語 | 高數 | C語言 | 物理 | 總分 | 平均分 |名次|
");
printf("|--------|-----------|------|------|-------|--------|-------|--------|----|
");
for(i=0;i<n;i++)
{
fread(&stud[i],LEN,1,fp);/*讀一個輸出一個*/
PF("| %d | %s | %d | %d | %d | %d | %d | %d | %d |
",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
++k);}
for(sum1=0,sum2=0,sum3=0,sum4=0,i=0;i<n;i++)
{fread(&stud[i],LEN,1,fp);
sum1=sum1+stud[i].score[0]; sum2+=stud[i].score[1];
sum3+=stud[i].score[2];sum4+=stud[i].score[3];}
PF("各 科 成 績 平均分:| %d | %d | %d | %d |",sum1/(n+1),sum2/(n+1),sum3/(n+1),sum4/(n+1));
PF("按任意鍵返回!");
fclose(fp);
getchar();
}
void find()
{ int k,m;
FILE *fp;
clrscr();/*清屏*/
if((fp=fopen("xx.out","r"))==NULL)
{PF("不能打開文件!
");
PF("按回車鍵返回:");
getchar(); return;
}
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("
請輸入要查詢的學生學號:");
SF("%d",&k);
getchar();
for(i=0;i<n;i++)
if(k==stud[i].num)/*查找記錄*/
{m=1;break;}
if(m==1)
{PF("| 學號 | 姓名 | 英語 | 高數 | C語言 | 物理 | 總分 | 平均分 |名次|
");
PF("|--------|-----------|------|------|-------|--------|-------|--------|----|
");
PF("| %d | % s | %d | %d | %d | %d | %d | %d | %d |
",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
stud[i].index);}
else PF("無記錄顯示,或記錄已被刪除!");
PF("按回車鍵返回!");
fclose(fp);
getchar();
}
void main()
{ FILE *fp;
char c;
int i; clrscr(); /**/
PF("
*歡迎使用學生成績統計系統*");
PF("
製作人 董偉");
PF("
2008年6月");
PF("
按回車鍵進入主菜單:");/**/
getchar();
do
{ clrscr();
PF("
");
PF(" **************
");
PF(" * 主菜單 *
");
PF(" **************
");
PF(" 1添加一個學生信息 2刪除一個學生信息
");
PF(" 3修改一個學生信息 4瀏覽全部學生信息
");
PF(" 5學生成績排序 6查找一個學生信息
");
PF(" 7 退出系統
");
PF(" 請選擇[1/2/3/4/5/6/7]:");
do
{ c=getchar();}
while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7');
getchar();
switch(c)
{ case'1':add();break;
case'2':del();break;
case'3':change();break;
case'4':display();break;
case'5':arrange();break;
case'6':find();break;
case'7':exit(0);
}
PF(" 按任意鍵返回主菜單:
");
getchar();
clrscr();
} while(1);
}
㈦ c語言程序學生成績管理系統源代碼
頭文件:::
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student) /*一個結構體數組元素的長度*/
#define numsubs 5 /*學科數目*/
typedef struct message_student /*結構體定義*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus; /*學生數目*/
extern student *pointer; /*指向結構體數組*/
extern int lens;
int menu_select(); /*函數聲明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();
#endif
#include "head.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加學生記錄 5.統計信息 |\n");
printf(" | 2. 查詢學生記錄 6.打開文件 |\n");
printf(" | 3. 修改學生記錄 7.保存文件 |\n");
printf(" | 4. 學生紀錄排序 8.顯示記錄 |\n");
printf(" | 0.退出系統 |\n");
printf("\n\n");
printf("請選擇(0-8):");
c=getchar();
getchar();
return (c-'0');
}
#include "head.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("沒有可被查找的記錄\n");
return -1;
}
else
{
printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按學號查找*/
{
printf("請輸入學號:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("請輸入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("請輸入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("沒有查找所要的信息。\n");
return -1;
}
return i;
}
}
#include"head.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已經有記錄存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("請輸入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("無法打開該文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件讀取成功\n");
printf("是否顯示紀錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "head.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("沒有可供查詢的記錄!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 請輸入查詢方式:");
printf("(直接輸入回車則結束查詢操作)\n");
printf("1.按照學號\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("請輸入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"head.h"
void statistic(student stud[]) /*新增功能,輸出統計信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("沒有可被查找的記錄\n");
else
{
while(1)
{
printf("下面將統計考試成績\n");
printf("請選擇你要統計哪科的成績 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有個%d記錄\n",numstus); /*總共記錄數*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("輸入錯誤!請輸入1~5之間的數\n");
}
sum=0;
getchar();
printf("是否繼續進行統計?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}
#include"head.h"
int writetotext(student stud[]) /*將所有記錄寫入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("輸入文件名稱:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存儲!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include"head.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t這是一個學生成績管理系統\n\t\t\t\t 傾情奉獻 歡迎使用!\n");
printf("\t*************************************************************\n");
}
void showtable()
{
printf("---------------------------------------------------------------------------------------\n");
printf("學號\t姓名\t性別\tA\tB\tC\tD\tE\t總分\t平均分\t名次\n");
printf("---------------------------------------------------------------------------------------\n");
}
void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*顯示表頭*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通過循環輸出數據*/
}
void display1()
{
printf("\t\t本系統由計應精英一組親情製作\n\n");
printf("\t\t製作人員列表: (按比劃)\n");
printf("\t\t王慶斌\t\t\t張威\n\t\t李智\t\t\t周在峰\n\t\t楊凱\t\t\t胡楊\n");
printf("\n\n");
getchar();
}
#include"head.h"
#include<string.h>
void amendrecord(student stud[])
{
char str[5]; /*供用戶輸入*/
int i=-1,j;
if(numstus==0) /*沒有記錄返回*/
printf("沒有可供修改的記錄!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要刪除這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("確定要修改這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
printf("下面請重新輸入學生的信息:\n");
printf("請輸入學號:");
gets(stud[i].number);
printf("請輸入姓名:");
gets(stud[i].name);
printf("請輸入性別(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("請按順序輸入成績:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否繼續進行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}
void deleterecord(student stu[],int i) /*刪除信息*/
{
int j;
while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("刪除成功!\n");
}
}
void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}
#include "head.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有記錄存在是否覆蓋?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("請輸入增加的學生信息條目數:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("請輸入學生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("請輸入學號:");
gets(pointer[i].number);
printf("請輸入姓名:");
gets(pointer[i].name);
printf("請輸入性別(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("請輸入各科成績:(按ABCDE的順序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]); /*計算總分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*計算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}#include "head.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配內存*/
numstus=0;
welcome(); /*歡迎界面*/
while(i>0)
{
i=menu_select(); /*控制菜單*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加學生信息*/
case 2:findrecord(pointer);break; /*查詢學生信息*/
case 3:amendrecord(pointer);break; /*修改學生信息*/
case 4:sort(pointer);break; /*學生信息排序*/
case 5:statistic(pointer);break; /*統計信息*/
case 6:openfile(pointer);break; /*打開文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*顯示記錄*/
case 0:
if(numstus!=0) printf("是否保存當前記錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系統*/
default:printf("請輸入數字0~8:\n");i=1; /*輸入錯誤*/
}
}
printf("\t\t歡迎再次使用本系統。\n\n");
display1();
}
自己一改就能用,給我加分哈!
㈧ 求一個用java寫的學生成績管理信息系統的源代碼,要求有界面,能實現
以下方法實現了用戶界面登陸
import java.awt.*;
import java.awt.event.*;
public class DengLuJieMian extends Frame implements ActionListener
{
Label username=new Label("用戶名:");//使用文本創建一個用戶名標簽
TextField t1=new TextField();//創建一個文本框對象
Label password=new Label("密碼:");//創建一個密碼標簽
TextField t2=new TextField();
Button b1=new Button("登陸");//創建登陸按鈕
Button b2=new Button("取消");//創建取消按鈕
public DengLuJieMian()
{
this.setTitle("學生信息管理系統");//設置窗口標題
this.setLayout(null);//設置窗口布局管理器
username.setBounds(50,40,60,20);//設置姓名標簽的初始位置
this.add(username);// 將姓名標簽組件添加到容器
t1.setBounds(120,40,80,20);// 設置文本框的初始位置
this.add(t1);// 將文本框組件添加到容器
password.setBounds(50,100,60,20);//密碼標簽的初始位置
this.add(password);//將密碼標簽組件添加到容器
t2.setBounds(120,100,80,20);//設置密碼標簽的初始位置
this.add(t2);//將密碼標簽組件添加到容器
b1.setBounds(50,150,60,20);//設置登陸按鈕的初始位置
this.add(b1);//將登陸按鈕組件添加到容器
b2.setBounds(120,150,60,20);//設置取消按鈕的初始位置
this.add(b2);// 將取消按鈕組件添加到容器
b1.addActionListener(this);//給登陸按鈕添加監聽器
b2.addActionListener(this);// 給取消按鈕添加監聽器
this.setVisible(true);//設置窗口的可見性
this.setSize(300,200);//設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});//通過內部類重寫關閉窗體的方法
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)//處理登陸事件
{
String name=t1.getText();
String pass=t2.getText();
if(name!=null&&pass.equals("000123"))//判斷語句
{
new StudentJieMian();
}
}
}
public static void main(String args[])//主函數
{
new DengLuJieMian();
}
}
以下方法實現了學生界面設計
import java.awt.*;
import java.awt.event.*;
class StudentJieMian extends Frame implements ActionListener
{
MenuBar m=new MenuBar();//創建菜單欄
Menu m1=new Menu("信息");//創建菜單「信息」
MenuItem m11=new MenuItem("插入");//創建「插入」的菜單項
MenuItem m12=new MenuItem("查詢");
Menu m2=new Menu("成績");//創建菜單「成績」
MenuItem m21=new MenuItem("查詢");
public StudentJieMian()
{
this.setTitle("學生界面");//設置窗口標題
this.setLayout(new CardLayout());//設置窗口布局管理器
this.setMenuBar(m);//將菜單欄組件添加到容器
m.add(m1);//將信息菜單放入菜單欄
m.add(m2);
m1.add(m11);//將「插入」菜單項添加到「信息」菜單
m1.add(m12); //將「查詢」菜單項添加到「信息」菜單
m2.add(m21); //將「查詢」菜單項添加到「成績」菜單
m11.addActionListener(this); //給「插入」菜單項添加監聽器
m12.addActionListener(this); //給「查詢」菜單項添加監聽器
m21.addActionListener(this); //給「查詢」菜單項添加監聽器
this.setVisible(true); //設置窗口的可見性
this.setSize(300,200); //設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//關閉窗口
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==m11) //處理「添加信息」事件
{
new AddStudent();
}
if(e.getSource()==m12) //處理「查詢信息」事件
{
new SelectStudent();
}
if(e.getSource()==m21) //處理「查詢成績」事件
{
new ChengJiStudent();
}
}
public static void main(String args[])
{ new StudentJieMian(); //創建一個對象 }