求C语言源代码 题目 学生成绩管理系统

作者&投稿:相鹏 (若有异议请与网页底部的电邮联系)
求C语言版数据结构题目“学生成绩管理系统”代码?~

头文件:student.h
#ifndef H_STUDENT_HH
#define H_STUDENT_HH


#include
#include
#include
#include


#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 copyRecord(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("
");
printf("****************************************
");
printf("* 这是一个 *
");
printf("* 学生成绩管理程序 *
");
printf("* 可以多学生成绩进行管理 *
");
printf("* 欢迎使用管理程序 *
");
printf("****************************************
");
printf("
");


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("
");
printf("0. 增加学生信息
");
printf("1. 修改学生信息
");
printf("2. 显示学生信息
");
printf("3. 查询学生信息
");
printf("4. 删除学生信息
");
printf("5. 对学生信息进行排序
");
printf("6. 保存学生信息至记录文件
");
printf("7. 从记录文件读取学生信息
");
printf("8. 新建学生信息文件
");
printf("9. 结束运行
");
printf("
左边数字对应功能选择,请选择0-9: ");


for(; ;)
{
gets(s);

cn=atoi(s);

if(cn==0&&(strcmp(s,"0")!=0)) cn=11;

if(cn9) printf("
输入错误,重选0-9: ");
else break;
}
return cn;
}


void newRecords(void)
{
char str[5];
if(numStus!=0)
{
if(savedTag==1)
{
printf("现在已经有记录,选择处理已有记录的方法。
");
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("请输入您希望进行的排序方式:
");
printf("1.按学号进行升序排序
");
printf("2.按学号进行降序排序
");
printf("3.按名称进行升序排序
");
printf("4.按名称进行降序排序
");
printf("5.按名次进行升序排序
");
printf("6.按名次进行降序排序
");
printf("7.按错了,我并不想进行排序
");
gets(str);

if(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))
{
copyRecord(&records[i],&tmps);
copyRecord(&records[j],&records[i]);
copyRecord(&tmps,&records[j]);
}
}
}
printf("排序已经完成
");
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("不能存入文件!
");
return -1;
}
printf("
存文件…
");
fwrite(records,sizeof(StuInfo)*numStus,1,fp);
fclose(fp);
printf("%d条件记录已经存入文件,请继续操作。
",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)?
");
printf("直接按回车则覆盖现有记录
");
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("打不开文件!请重新选接
");
return -1;
}
printf("
取文件…
");
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 ("请输入查询的方式:(直接输入回车则结束查询)
");
printf ("1. 按学号
");
printf ("2.按姓名
");
printf ("3.按名次
");
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%s%s",records[i].number,
records[i].name,records[i].gender);
for (j=0;j<NUM_SUBJECT;j++)
printf ("%.lf",records[i].score[j]);
printf ("%.lf%.lf%d
",
records[i].sum,records[i].average,
records[i].index);
i = findRecord(target,type,i+1);
}

if (count==0)
printf ("没有符合条件的学生!
");
else
printf ("一共找到了%d名学生的信息

",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("(直接输入回车则结果移除操作)
");
printf("1.按学号
");
printf("2.按姓名
");
printf("3.按名次
");
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("没有符合条件的学生!
");
while (i!=-1)
{showTable();
printf("%s%s%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("%.1f",records[i].score[j]);
printf("%.1f%.1f%d
",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++)
{
copyRecord(&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 copyRecord(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(" (直接输入回车则结束移除操作)
");
printf("1. 按学号
");
printf("2. 按姓名
");
printf("3. 按名次
");
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("没有符合条件的学生!
");

while(i != -1)
{
showTable();
printf("%s%s%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("%.1f",records[i].score[j]);
printf("%.1f%.1f%d
",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("下面请输入该学生的信息:
");
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("学号姓名性别");
for(j=0;j<NUM_SUBJECT;j++)
printf("%s",subject[j]);
printf("总分平均分名次
");
}

void display(void)
{
int i,j;
if(numStus==0)
{
printf("没有可供显示的记录!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s%s%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("%.1f",records[i].score[j]);
printf("%.1f%.1f%d
",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("输入任一字符后继续...
");
getch();
printf("
");
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("原来没有记录,现在建立新表
");
else
printf("下面在当前表的末尾增加新的信息
");
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条信息
",numStus);
savedTag=1;
}


void dispaly(void)
{
int i ,j;
if(numStus==0)
{
printf("没有可供显示的记录!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s%s%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("%.1f%.1f%d
",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("输入任一字符后继续...
");
getch();
printf("

");
showTable();
}
}}
可能有帮助。

学生成绩管理系统的源代码在CSDN上有下载的。
而且可以运行。
希望没有害你。自己可以尝试的做做。不懂的来问,肯定会有人来解答的。

#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;
}

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
struct student
{int num;//学号
char name[20];//名字
char sex[6];//性别
int foxscore;//fox成绩
int cscore;//C语言
int englishscore;//英语成绩
float zong;//总成绩
int mingci;//名次
struct student *next;
};
int n=0;
struct student *begin()//开辟一个存储空间
{
struct student *head;
head=(struct student *)malloc(sizeof(struct student));
if(head==NULL)
{
printf("没有足够空间!\n");
}
head->next=NULL;
return(head);
}
struct student *input(struct student *head)//输入函数
{int k=1;
struct student *student,*p1;
student=(struct student *)malloc(sizeof(struct student));
while(k)
{ printf("输入学生信息:\n");
n++;
printf("请输入学生学号:");
scanf("%d",&student->num);
printf("请输入学生姓名:");
scanf("%s",&student->name);
printf("请输入学生性别:");
scanf("%s",&student->sex);
printf("请输入学生fox成绩:\n");
scanf("%d",&student->foxscore);
printf("请输入学生c语言成绩:\n");
scanf("%d",&student->cscore);
printf("请输入学生英语成绩:\n");
scanf("%d",&student->englishscore);

/* printf("是否继续?是按1 否按0\n");
scanf("%d",&k);

p1=(struct student *)malloc(sizeof(struct student));
if(k!=0)
{
student->next=p1;
student=p1;
}
}
student->next=NULL;
return(head);
}*/
if(n==1) {student->next=NULL; head=student;}
else {student->next=head;head=student;}
printf("是否继续?是按1 否按0\n");
scanf("%d",&k);

p1=(struct student *)malloc(sizeof(struct student));
if(k!=0)
{
p1->next=student;
student=p1;
}
}

return(head);

}

struct student *revise(struct student *head)//修改函数
{ struct student *p1,*p2;int u,t;
printf("请输入要修改学生学号:");
scanf("%d",&u); p1=head;
while(p1->num!=u&&p1->next !=NULL )
{p2=p1;p1=p1->next;}
if(u==p1->num)
{
printf("学号:%d\n",p1->num);
printf("姓名: "); puts(p1->name);//printf("\n");
printf("性别: "); puts(p1->sex);//printf("\n");
printf("fox成绩:%d\n",p1->foxscore);
printf("c语言成绩:%d\n",p1->cscore);
printf("英语成绩:%d\n",p1->englishscore);
}
printf("*******1.修改学号*****\n");
printf("*******2.修改姓名*****\n");
printf("*******3.修改性别*****\n");
printf("*******4.修改成绩*****\n");
printf(" please input choice(0-4):");
scanf("%d",&t);
switch(t)
{ case 1: {printf("请输入学生学号:");
scanf("%d",&p1->num);} break;
case 2: {printf("请输入学生姓名:");
scanf("%s",&p1->name);} break;
case 3: {printf("请输入学生性别:");
scanf("%s",&p1->sex);} break;
case 4: { printf("请输入学生fox成绩:\n");
scanf("%d",&p1->foxscore);
printf("请输入学生c语言成绩:\n");
scanf("%d",&p1->cscore);
printf("请输入学生英语成绩:\n");} break;
}

return(head);
}
void print(struct student *head)//输出函数
{struct student *p;
p=head;
do
{printf("学号:%d\n",p->num);
printf("姓名: "); puts(p->name);
printf("性别: "); puts(p->sex);
printf("fox成绩: %d\n",p->foxscore);
printf("c语言成绩: %d\n",p->cscore);
printf("英语成绩: %d\n",p->englishscore);
p->zong=(float)(p->foxscore+p->cscore+p->englishscore);
printf("总成绩: %.1f\n",p->zong);
printf("\n");
p=p->next; }while(p!=NULL);
}
void paiming(struct student *head)//******排名次******
{int i; struct student *p0,*p1,*p2;
for(i=1;i<n;i++)
{
p2=head;p1=p2;
p0=(struct student *)malloc(sizeof(struct student));

while(p2->next!=NULL)
{ p1=p2->next;
if(p2->zong<p1->zong)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore; }
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}
p1=head;
for(i=1;i<=n;i++)
{p1->mingci=i; p1=p1->next;
}
}
void chaxun(struct student *head)//查询函数
{
int t,nu,mc;char na[20];struct student *p1,*p2;
printf("*******1.按学号查询*****\n");
printf("*******2.按姓名查询*****\n");
printf("*******3.按名次查询*****\n");
printf("*******0.退出*********\n");
printf(" please input choice(0-3):");
scanf("%d",&t);
switch(t)
{
case 1: {printf("请输入学生学号:");
scanf("%d",&nu);
if(head==NULL) printf("无数据\n");
p1=head;
while(nu!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(nu==p1->num)
{printf("学号:%d\n",p1->num);
printf("姓名: "); puts(p1->name);
printf("性别: "); puts(p1->sex);
printf("fox成绩: %d\n",p1->foxscore);
printf("c语言成绩: %d\n",p1->cscore);
printf("英语成绩: %d\n",p1->englishscore);
printf("\n");
}
else printf("学号%d 的学生未找到\n",nu);};break;
case 2: { printf("请输入学生姓名:");
scanf("%s",na);
if(head==NULL) {printf("无数据\n");}
p1=head;
while(strcmp(na,p1->name)!=0&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(strcmp(na,p1->name)==0)
{printf("学号:%d\n",p1->num);
printf("姓名: "); puts(p1->name);
printf("性别: "); puts(p1->sex);
printf("fox成绩: %d\n",p1->foxscore);
printf("c语言成绩: %d\n",p1->cscore);
printf("英语成绩: %d\n",p1->englishscore);
}
else printf("该学生未找到\n");} break;
case 3: {paiming(head);

printf("请输入学生名次:");
scanf("%d",&mc);
if(head==NULL) {printf("无数据\n");}
p1=head;
while(mc!=p1->mingci&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(mc==p1->mingci)
{printf("学号:%d\n",p1->num);
printf("姓名: "); puts(p1->name);
printf("性别: "); puts(p1->sex);
printf("fox成绩: %d\n",p1->foxscore);
printf("c语言成绩: %d\n",p1->cscore);
printf("英语成绩: %d\n",p1->englishscore);
}
else printf("名次%d 的学生未找到\n",mc);} break;
case 0:break;
}
}
struct student *shanchu(struct student *head)//删除函数
{
int t,nu,mc;char na[20];struct student *p1,*p2;
printf("*******1.按学号删除*****\n");
printf("*******2.按姓名删除*****\n");
printf("*******3.按名次删除*****\n");
printf("*******0.退出*********\n");
printf(" please input choice(0-3):");
scanf("%d",&t);
switch(t)
{
case 1: {printf("请输入学学号:");
scanf("%d",&nu);
if(head==NULL) {printf("无数据\n");return NULL;}
p1=head;
while(nu!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(nu==p1->num)
{if(p1==head)head=p1->next;
else p2->next=p1->next;
n=n-1;
free(p1);printf("已删除");
}
else printf("学号%d 的学生未找到\n",nu);} break;
case 2: { printf("请输入学生姓名:");
scanf("%s",na);
if(head==NULL) {printf("无数据\n");return NULL;}
p1=head;
while(strcmp(na,p1->name)!=0&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(strcmp(na,p1->name)==0)
{if(p1==head)head=p1->next;
else p2->next=p1->next;
n=n-1;
free(p1);printf("已删除");
}
else printf("该学生未找到\n");} break;
case 3: { paiming(head);
printf("请输入学生名次:");
scanf("%d",&mc);
if(head==NULL) {printf("无数据\n");return NULL;}
p1=head;
while(mc!=p1->mingci&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(mc==p1->mingci)
{if(p1==head)head=p1->next;
else p2->next=p1->next;
n=n-1;
free(p1);printf("已删除");
}
else printf("名次%d 的学生未找到\n",mc);} break;
case 0:break;
}
return(head);}
struct student *paixu(struct student *head)//排序函数
{int i,s,t;struct student *p1,*p2,*p0;
printf("*******1.按学号排序*****\n");
printf("*******2.按姓名排序*****\n");
printf("*******3.按成绩排序*****\n");
printf("*******0.退出*********\n");
printf(" please input choice(1-3):");
scanf("%d",&t);
switch(t)
{
case 1:
{printf("********1.按学号升续*****\n");
printf("*******2.按学号降续*****\n");
scanf("%d",&s);
for(i=1;i<n;i++)
{
p2=head;p1=p2;
p0=(struct student *)malloc(sizeof(struct student));

if(s==1)
{while(p2->next!=NULL)
{ p1=p2->next;
if(p2->num>p1->num)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore; }
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}
else if(s==2)
{while(p2->next!=NULL)
{ p1=p2->next;
if(p2->num<p1->num)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore; }
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}

}
}
break;
case 2:

{printf("*******1.按姓名升续*****\n");
printf("*******2.按姓名降续*****\n");
scanf("%d",&s);
for(i=1;i<n;i++)
{
p2=head;p1=p2;
p0=(struct student *)malloc(sizeof(struct student));

if(s==1)
{while(p2->next!=NULL)
{ p1=p2->next;
if(strcmp(p1->name,p2->name)<0)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore; }
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}

else if(s==2)
{while(p2->next!=NULL)
{ p1=p2->next;
if(strcmp(p1->name,p2->name)>0)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore;}
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}

}
}
break;
case 3:
{ printf("*******1.按成绩升续*****\n");
printf("*******2.按成绩降续*****\n");
scanf("%d",&s);
for(i=1;i<n;i++)
{
p2=head;p1=p2;
p0=(struct student *)malloc(sizeof(struct student));

if(s==1)
{while(p2->next!=NULL)
{ p1=p2->next;
if(p2->zong>p1->zong)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore;}
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}
else if(s==2)
{while(p2->next!=NULL)
{ p1=p2->next;
if(p2->zong<p1->zong)
{p0->num=p2->num;strcpy(p0->name,p2->name);strcpy(p0->sex,p2->sex);
p0->zong=p2->zong;p0->mingci=p2->mingci;
p0->foxscore=p2->foxscore;p0->cscore=p2->cscore;p0->englishscore=p2->englishscore;
p2->num=p1->num;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);
p2->zong=p1->zong;p2->mingci=p1->mingci;
p2->foxscore=p1->foxscore;p2->cscore=p1->cscore;p2->englishscore=p1->englishscore;
p1->num=p0->num;strcpy(p1->name,p0->name);strcpy(p1->sex,p0->sex);
p1->zong=p0->zong;p1->mingci=p0->mingci;
p1->foxscore=p0->foxscore;p1->cscore=p0->cscore;p1->englishscore=p0->englishscore;}
//*****************交换结点内容
else
{p2=p1;p1=p1->next;}
}
}

}
}
break;

case 0:break;
}
print(head);
return(head);}
//**********操作文件*****
void save(struct student *l)
{struct student *y;
FILE *fp;
char ch[20];
cout<<"请输入文件名!"<<endl;
scanf("%s",ch);
if((fp=fopen(ch,"wb+"))==NULL)
{cout<<"打开失败!"<<endl;
exit(0);}
for(y=l;y!=NULL;y=y->next)
fwrite(y,sizeof(struct student),1,fp);
fclose(fp);
cout<<"保存成功!"<<endl;
}
void readfl()
{struct student *k,st;
char ch[20];
FILE *fp;
k=&st;
cout<<"请输入您要打开的文件名!"<<endl;
scanf("%s",ch);
if((fp=fopen(ch,"rb+"))==NULL)
{cout<<"打开失败!"<<endl;
exit(0);}
fread(&st,sizeof(struct student),1,fp);
while(!feof(fp))
{printf("学号:%d\n",k->num);
printf("姓名: "); puts(k->name);//printf("\n");
printf("性别: "); puts(k->sex);//printf("\n");
printf("fox成绩: %d\n",k->foxscore);
printf("c语言成绩: %d\n",k->cscore);
printf("英语成绩: %d\n",k->englishscore);

k->zong=(float)(k->foxscore+k->cscore+k->englishscore);
printf("总成绩: %.1f\n",k->zong);
fread(&st,sizeof(struct student),1,fp);
}
fclose(fp);
}
void main()
{int c; struct student *head;
head=begin();
printf("\n\t\t***********学生成绩管理系统***********\n\n");
while(1)
{printf("\n\t\t****************菜单*****************\n\n");
printf( "\t\t*\t1.建立信息 *\n");
printf( "\t\t*\t2.信息修改 *\n");
printf("\t\t*\t3.信息显示 *\n");
printf("\t\t*\t4.信息查询 *\n");
printf("\t\t*\t5.信息删除 *\n");
printf("\t\t*\t6.按学生信息排序 *\n");
printf("\t\t*\t7.信息保存 *\n");
printf("\t\t*\t8.信息输出 *\n");
printf( "\t\t*\t0.退出 *\n");
printf("\t\t*************************************\n");
do {
printf("\n\t\t please input choice(0-9):");
scanf("%d",&c);
}while(c<0||c>8);
//return c;
switch (c)
{ case 1:head=input(head);break;
case 2:if(n==0) printf("请先输入信息");
else head=revise(head);break;
case 3:if(n==0) printf("请先输入信息");
else print(head); break;
case 4:chaxun(head);break;
case 5:head=shanchu(head);break;
case 6:if(n==0) printf("请先输入信息");
else head=paixu(head);break;
case 7:save(head);break;
case 8:if(n==0) printf("请先输入信息");
else readfl();break;
case 0:exit(0);break;}
}
}

发你邮箱了
请注意查收!


纳雍县13282927443: 求一个学生成绩管理系统的C语言代码!!急!! -
雕烟乳癖: #includestruct student { char num[10];char name[20];char sex[5];float grade[7];float v;float sum;}stu[50]; int k=0;void input(); void output(); void search(); void average(); void sort(); void save(); void main() { int a;do{printf("\n\n **************...

纳雍县13282927443: (高分)C语言 题目:学生学生成绩管理 -
雕烟乳癖: 按照你的要求写的程序,希望对你有帮助 #include <stdio.h> #include <string.h> #include <stdlib.h>struct grade {char name[20], ID[10];int maths, english, C;grade *next; }; grade *CreateList() {grade *head = NULL, *temp = NULL, *tail;printf(...

纳雍县13282927443: 编程如何用C语言编写一个学生成绩管理系统程序 -
雕烟乳癖: 我们才做了这个作业... #include <malloc.h> #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct scorenode) #define DEBUG #include <string.h> struct scorenode { int number;/*学号*/ char name[8];/*姓名*/ float cj1;/*成绩1*/ ...

纳雍县13282927443: 用c语言,求学生成绩 -
雕烟乳癖: #include<stdio.h>#include<stdlib.h>/*定义全局变量*/ int num; struct student { l name[20]; charong id; char sex[10]; int math; int english; int c_program; int total; }stu[41];/*主菜单*/ void page_title() {printf("※※※※※※※※计算机系学生成绩管理...

纳雍县13282927443: 【急】求C语言学生成绩管理系统源代码,要能用的 -
雕烟乳癖: #include#define MAX 80 void input(); void sort(); void display(); void insert(); void del(); void average(); void find();; void read();; void average(); void modify(); int now_no=0; struct student { int no; char name[20]; char sex[4]; float score1; float score2; ...

纳雍县13282927443: 学生成绩管理 c语言源代码 -
雕烟乳癖: #include <time.h>#include<stdio.h>#include<conio.h>#include <stdlib.h>#include<string.h>#define MAX 80 void input(); void sort(); void display(); void insert(); void del(); void average(); void find(); void save(); void read(); void del_file(); void ...

纳雍县13282927443: 求用C语言中最简单的代码编写学生成绩管理系统 -
雕烟乳癖: #include "View.h" //导入视图类 #include//导入标准IO库 int main(void) { View NewView; //显示类 NewView.SetSoftVersion("1.01"); //设置版本 int nState = 0; while(1) { switch(NewView.GetnActionState()) { case 0: return 0; } 这是我在很...

纳雍县13282927443: c语言设计学生成绩管理系统 -
雕烟乳癖: #include<iostream> #include<cstdio> #include<cmath> #include<vector> #include<list> #include<cstring> #include<map> #include<set> #include<algorithm> #include<queue> using namespace std; int n; struct birth {int year,month,day; };struct ...

纳雍县13282927443: 怎么用c语言编写一个学生成绩管理系统啊?急…… -
雕烟乳癖: C语言课程设计报告-------学生成绩简单管理程序 一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增)...

纳雍县13282927443: 学生成绩管理系统c语言 求源代码 -
雕烟乳癖: #include"stdio.h" #include"stdlib.h" #include"string.h" #define N 3 typedef struct z1 { char no[11]; char name[15]; int score[N]; float sum; float average; int order; struct z1 *next; }STUDENT; STUDENT *init(); STUDENT *create(); STUDENT *...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网