如何用c语言制作一个学生信息管理系统,要求以文件形式保存 c语言学生管理系统用文件保存

www.zhiqu.org     时间: 2024-06-02

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//链表结点结构体声明

typedef struct subjects

{

char name[20];

float score;

}sub;

typedef struct student

{

int num;

char name[20];

sub  subject[3];

struct student* next;

}stu,*pstu;

#define SIZE sizeof(stu)

//函数申明

pstu LoadInfo();

void PrintMenu();

pstu AddStu(pstu );

pstu DeleStu(pstu );

pstu RwrStu(pstu );

void FindStu(pstu , char );

void Count(pstu ,char * ,float ,float );

void Rank(pstu ,char * );

void SaveQuit(pstu );

 //创建菜单,进入选择循环

while(1)

{

PrintMenu();

printf("请输入您的选择编号:");

scanf("%d",&n);

getchar();                      

switch(n)

{

case 1: 

{

system("cls");             

j=0;

while(4!=j)         

{

printf("欢迎进入信息管理版块!

");

printf("\025 1、添加学生
");

printf("\025 2、删除学生
");

printf("\025 3、修改学生信息
");

printf("\025 4、返回
");

printf("请输入您的选择编号:
");

scanf("%d",&j);

getchar();

if     ( 1 == j) head = AddStu(head);       

else if( 2 == j) head = DeleStu(head);      

else if( 3 == j) head = RwrStu(head);       

else if( 4 == j) ;

else printf("输入有误,请重新输入!
");

}

case 2:

{

//信息查询

system("cls");

printf("欢迎进入信息查询版块!
");

printf("请输入要查询的学生编号:");

scanf("%d",&j);

getchar();

//printf("%d
",j);          //检测输入是否成功,调试程序用

FindStu(head,j);            //查询并输出

printf("
请输入回车键返回主菜单!");

getchar();

system("cls");

break;

}

扩展资料:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

参考资料来源:百度百科-c语言



#include "stdio.h"
#define SIZE 100000
#include"string.h"
#include"stdlib.h"
#include"conio.h"
struct student
{int n;
int num;
char name[10];
int C;
int Maths;
int En;
float ave;
}stu[SIZE];

/*录入数据*/
void finput()
{
FILE *fp;
int i,p;
fp=fopen("fstu","wb");
for(i=0;i<SIZE;i+1)
{
printf("i=%d 输入序号i(当输入i=-1时,返回),i=",i++);
scanf("%d",&i);
if(i==-1)
{
fclose(fp);
return;
}
else
{
printf("请输入学号,姓名,C成绩,数学成绩,英语成绩:");
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);
stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;
stu[i].n=i+1;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}

/*输出数据*/
void flist()
{
FILE *fp;
int i;
fp=fopen("fstu","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}

/*查找数据*/
void fsearch()
{
FILE *fp;
int i,num;
fp=fopen("fstu","rb");
rewind(fp);
printf("请输入要查找的学号:");
scanf("%d",&num);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<=SIZE;i++)
if(stu[i].num==num)
{
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
fclose(fp);
}

/*增加数据*/
void fadden()
{
int i,s;
FILE *fp;
fp=fopen("fstu","ab+");
rewind(fp);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
s=i;
for(i=s;i<SIZE;i++)
{
printf("i=%d 输入序号i(当输入i=-1时,返回),i=",i+1);
scanf("%d",&i);
if(i==-1)
{
fclose(fp);
return;
}
else
{
printf("请输入学号,姓名,C成绩,数学成绩,英语成绩:");
stu[i].n=i+1;
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);
stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}

/*修改数据*/
void fchange()
{
FILE *fp;
int i,num,n;
int flag=0;
printf("请输入要修改学生的学号:");
scanf("%d",&num);
for(i=0;i<=SIZE;i++)
if(stu[i].num==num)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("fstu","rb+");
fseek(fp,n*sizeof(struct student),0);
printf("请输入新的学号,姓名,C成绩,数学成绩,英语成绩:");
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);
stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("fstu","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}

/*成绩排序*/
void ftaxis()
{
int i,j,n;
FILE *fp;
struct student t;
fp=fopen("fstu","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].ave<stu[j].ave)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("fstus","wb");
printf("\n\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表 \n");
printf("-----------------------------------------------------------\n");
printf("序号 学号 姓名 C成绩 数学 英语 平均\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
printf("%d%8d%8s%8d%8d%8d%16.2f\n",stu[i].n,stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}

/*主函数*/
main()
{
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 欢迎来到学生信息管理系统 ※\n");
printf("※ ※\n");
printf("※ 系部:通信工程 专业:通信工程 ※\n");
printf("※ 姓名: 学号: ※\n");
printf("※ 班内序号: 指导老师: ※\n");
printf("※ ※\n");
printf("※ 主菜单 ※\n");
printf("※ ※\n");
printf("※ ▲1.录入数据▲ ※\n");
printf("※ ▲2.输出数据▲ ※\n");
printf("※ ▲3.查找数据▲ ※\n");
printf("※ ▲4.增加数据▲ ※\n");
printf("※ ▲5.修改数据▲ ※\n");
printf("※ ▲6.成绩排序▲ ※\n");
printf("※ ▲7.退出系统▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("请输入选择项(1-7):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<8)
{
switch(n)
{
case 1:finput();break;
case 2:flist();break;
case 3:fsearch();break;
case 4:fadden();break;
case 5:fchange();break;
case 6:ftaxis();break;
case 7:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 谢谢使用! ※\n");
printf("※ 再见! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 输入错误! ※\n");
printf("※ 请退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}

C语言设计一个学生学籍管理系统,要求文件形式保存,且用到链表~

#include#include#include//链表结点结构体声明typedef struct subjects{char name[20];float score;}sub;typedef struct student{int num;char name[20];sub subject[3];struct student* next;}stu,*pstu;#define SIZE sizeof(stu)//函数申明pstu LoadInfo();void PrintMenu();pstu AddStu(pstu );pstu DeleStu(pstu );pstu RwrStu(pstu );void FindStu(pstu , char );void Count(pstu ,char * ,float ,float );void Rank(pstu ,char * );void SaveQuit(pstu );//主函数int main(){ float score1,score2;char n,j;char subname[20];pstu head,ptr;head = LoadInfo();ptr = head->next;//创建菜单,进入选择循环while(1){PrintMenu();printf("请输入您的选择编号:");scanf("%d",&n);getchar(); switch(n){case 1: {system("cls"); j=0;while(4!=j) {printf("欢迎进入信息管理版块!

");printf("\025 1、添加学生
");printf("\025 2、删除学生
");printf("\025 3、修改学生信息
");printf("\025 4、返回
");printf("请输入您的选择编号:
");scanf("%d",&j);getchar();if ( 1 == j) head = AddStu(head);else if( 2 == j) head = DeleStu(head);else if( 3 == j) head = RwrStu(head);else if( 4 == j) ;else printf("输入有误,请重新输入!
");}printf("请输入回车键返回主菜单!"); //此处本意按任意键返回,但是任意键的话,需要按键A,再按回车确定getchar();//则会连续收到两个按键,造成错误读入,可以改进scanf接收字符串,system("cls");//以下所有getchar()、system("cls")同理break;}case 2:{//信息查询system("cls");printf("欢迎进入信息查询版块!
");printf("请输入要查询的学生编号:");scanf("%d",&j);getchar();//printf("%d
",j); //检测输入是否成功,调试程序用FindStu(head,j); //查询并输出printf("
请输入回车键返回主菜单!");getchar();system("cls");break;}case 3:{//成绩统计system("cls");printf("欢迎进入成绩统计版块!
");printf("请输入科目:");scanf("%s",&subname);getchar();printf("请输入分数范围(score1,score2):");scanf("%f,%f",&score1,&score2);getchar();/*printf("%s %5.2f %5.2f
",subname, score1,score2); */ //检测输入是否成功,调试程序用Count(head,subname,score1,score2); //统计并输出printf("请输入回车键返回主菜单!");getchar();system("cls");break;}case 4:{//成绩排序system("cls");printf("欢迎进入成绩排序版块,请输入科目:");scanf("%s",&subname);getchar();Rank(head,subname); //排序并输出printf("
请输入回车键返回主菜单!
");getchar();system("cls");break;}case 5:{//保存退出SaveQuit(head);//文件操作,保存并退出free(head);return 0;}default: {printf("输入有误,按回车键重新选择!
");//主菜单错误输出检测getchar();system("cls");}}} }//加载data数据 ,文件操作pstu LoadInfo(){int num;char name[20];char sub1[20];char sub2[20];char sub3[20];float score1;float score2;float score3;char filename[] = "D:\\编程学习\\编程实践\\c语言课程设计1 学生信息管理\\data.txt"; //文件名,此处为简化编程,采用固定地址名称,未作输入 FILE *fp; pstu head,ptr;//创建带表头结点的空单链表head,用来存放载入信息head = (pstu)malloc(SIZE);ptr = head;ptr->next = NULL;//加载data文件,存入head链表if( NULL == (fp = fopen(filename,"r")) ) //判断文件是否存在及可读{ printf("error!"); exit(0); } while (!feof(fp)) { fscanf(fp,"%d %s %s %f %s %f %s %f
",&num,&name, &sub1,&score1,&sub2,&score2,&sub3,&score3); //读取一行,采用格式化读取,避免了其他各种读取方法的数据处理问题//该方法缺点明显,对数据格式要求教研,故data文件规定数据格式ptr->next = (pstu)malloc(SIZE);ptr = ptr->next;ptr->next = NULL;ptr->num = num;strcpy(ptr->name,name);strcpy(ptr->subject[0].name,sub1);ptr->subject[0].score = score1;strcpy(ptr->subject[1].name,sub2);ptr->subject[1].score = score2;strcpy(ptr->subject[2].name,sub3);ptr->subject[2].score = score3;} fclose(fp); //关闭文件,已得到保存data信息的链表headreturn head;}//打印主菜单void PrintMenu() {printf("***************************************
");printf(" 枫枫学生信息管理系统
");printf("***************************************
");putchar('
');printf("菜单
");printf("\025 1、信息管理
");printf("\025 2、信息查询
");printf("\025 3、成绩统计
");printf("\025 4、成绩排序
");printf("\025 5、保存退出
");}//添加学生pstu AddStu(pstu x) {char namestu[20];char *p;char subname1[20],subname2[20],subname3[20];pstu head,ptr;head = x;ptr = head;while( NULL != ptr->next )//遍历链表,找到链尾结点{ptr = ptr->next;}ptr->next = (pstu)malloc(SIZE);//默认在链表末追加添加信息ptr = ptr->next;ptr->next = NULL;printf("请输入添加学生的信息:
");printf("请输入添加学生的学号:");scanf("%d",&ptr->num);getchar();printf("请输入添加学生的姓名:");scanf("%s",namestu);getchar();p = namestu;strcpy(ptr->name,p);printf("请输入添加学生的科目1名称:");scanf("%s",&subname1);getchar();p = subname1;strcpy(ptr->subject[0].name,p);printf("请输入添加学生的科目1成绩:");scanf("%f",&ptr->subject[0].score);getchar();printf("请输入添加学生的科目2名称:");scanf("%s",&subname2);getchar();p = subname2;strcpy(ptr->subject[1].name,p);printf("请输入添加学生的科目2成绩:");scanf("%f",&ptr->subject[1].score);getchar();printf("请输入添加学生的科目3名称:");scanf("%s",&subname3);getchar();p = subname3;strcpy(ptr->subject[2].name,p);printf("请输入添加学生的科目3成绩:");scanf("%f",&ptr->subject[2].score);getchar();putchar('
');return head;}//删除学生pstu DeleStu(pstu x) {int num;pstu head,ptr,qtr;head = x;ptr = head->next;qtr = head;printf("请输入要删除的学生的学号:");scanf("%d",&num);getchar();while(ptr!=NULL){if( ptr->num != num)//遍历查找链表结点,未找到跳过该结点{ptr = ptr->next;qtr = qtr->next;}else//找到则删除结点{ptr = ptr->next;qtr->next = ptr;break;}}printf("该学生信息已删除!

");return head;}//修改学生信息pstu RwrStu(pstu x) {char namestu[20];char *p;char subname1[20],subname2[20],subname3[20];int num;pstu head,ptr;head = x;ptr = head->next;printf("请输入要修改的学生的学号:");scanf("%d",&num);getchar();while(ptr!=NULL){if( ptr->num == num ){printf("已找到该学生信息,请填入修改项目:");printf("请输入修改学生的姓名:");scanf("%s",namestu);getchar();p = namestu;strcpy(ptr->name,p);printf("请输入修改学生的科目1名称:");scanf("%s",subname1);getchar();p = subname1;strcpy(ptr->subject[0].name,p);printf("请输入修改学生的科目1成绩:");scanf("%f",&ptr->subject[0].score);getchar();printf("请输入修改学生的科目2名称:");scanf("%s",subname2);getchar();p = subname2;strcpy(ptr->subject[1].name,p);printf("请输入修改学生的科目2成绩:");scanf("%f",&ptr->subject[1].score);getchar();printf("请输入修改学生的科目3名称:");scanf("%s",subname3);getchar();p = subname3;strcpy(ptr->subject[2].name,p);printf("请输入修改学生的科目3成绩:");scanf("%f",&ptr->subject[2].score);getchar();printf("该学生信息已修改!

");break;}else{ptr = ptr->next;}}return head;}//查找学生,参数为链表指针,和学生学号//不好,应该将学号输入放进子函数,简化主函数结构,减少子函数参数void FindStu(pstu x,char y) {pstu head,ptr;head = x;ptr = head->next;while( ptr != NULL){if( ptr->num == (int)y)//因主函数中为节省空间,学号输入采用char数据,故强行准换{printf("已找到该学生信息!
如下:");printf("%03d %s %s %5.2f %s %5.2f %s %5.2f
",ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,ptr->subject[1].name,ptr->subject[1].score,ptr->subject[2].name,ptr->subject[2].score);break;//注意此处找到并输出信息后要手动退出循环}else{ptr = ptr->next;}}if( ptr == NULL )//查询成功检测,while循环中若找到,则ptr停留在当前学生的结点上{printf("未能找到该学生信息!
");}}//统计科目分数区间段的学生,参数为链表指针,科目名称,分数区间上下限//同理,参数的录入应放入子函数,简化结构和编程void Count(pstu x,char *y,float q,float p) {pstu head,ptr;char name[20];char flag=0; //手动设置的查找结果flaghead = x;ptr = head->next;strcpy(name,y);//printf("%s %5.2f %5.2f
",name,q,p); //检测输入参数的传递,调试程序用while( ptr != NULL)//开始查找统计,科目查找用strcmp函数比较科目字符串,返回值0为字符串相等{//此处while循环体中,重复的查找步骤太多,应设置科目匹配flag,参照rank()函数if( strcmp(name,ptr->subject[0].name) == 0 ) //通过flag将科目确认放在while之外,循环体内只做分数区间的扫描和输出{if( q subject[0].score && ptr->subject[0].scorenum,ptr->name,ptr->subject[0].name,ptr->subject[0].score);flag++;}}if( strcmp(name,ptr->subject[1].name) == 0 ){if( q subject[1].score && ptr->subject[1].scorenum,ptr->name,ptr->subject[1].name,ptr->subject[1].score);flag++;}}if( strcmp(name,ptr->subject[2].name) == 0 ){if( q subject[2].score && ptr->subject[2].scorenum,ptr->name,ptr->subject[2].name,ptr->subject[2].score);flag++;}}ptr = ptr->next;}if(flag==0){printf("未能找到该课程该区间分数段的学生!
");}}//学科成绩排名,采用交换数据的方法,参数为链表指针,科目名称//同理参数问题//链表排序问题,此处用交换结点数据方法,还有其他多种排序方法//如,交换结点,辅助指针数组排序(未实现,过程繁杂),插入法排序等void Rank(pstu x,char *y) {pstu head,ptr,qtr;char name[20];char len=0;char flag=0; //简化算法,设置科目查找结果判断值,flag=0表示科目输入为未知科目,不存在int i=0;//i、j循环次数控制参数int j=0; char temp_name[20];//数据交换时的暂存信息变量float temp0,temp1,temp2;int temp_num;strcpy(name,y);head = x;ptr = head->next;while( ptr != NULL) //测链表长度,不包括表头结点{ptr = ptr->next;len++;}ptr = head->next; //指针ptr用过之后记得回原位//开始查找科目if( strcmp(name,ptr->subject[0].name) == 0)flag=1; if( strcmp(name,ptr->subject[1].name) == 0)flag=2;if( strcmp(name,ptr->subject[2].name) == 0)flag=3;if( flag == 0){printf("未找到该科目!");return;}//开始排序,冒泡法比较各结点数据//此处3个并列的if用switch case更清晰结构if( n == 1 ){for( i=0;inext->next;//每一次内循环之后,ptr、qtr必然在最后两个节点上qtr = head->next;//故在进行内循环之前,要重新复位ptr、qtrfor( j=0;jsubject[0].score subject[0].score ){temp_num = qtr->num;//交换数据,因数据格式(科目顺序)明确规定,故不再做科目名称的替换strcpy(temp_name,qtr->name);temp0 = qtr->subject[0].score;temp1 = qtr->subject[1].score;temp2 = qtr->subject[2].score;qtr->num = ptr->num;strcpy(qtr->name,ptr->name);qtr->subject[0].score = ptr->subject[0].score;qtr->subject[1].score = ptr->subject[1].score;qtr->subject[2].score = ptr->subject[2].score;ptr->num = temp_num;strcpy(ptr->name,temp_name);ptr->subject[0].score = temp0;ptr->subject[1].score = temp1;ptr->subject[2].score = temp2;}qtr = qtr->next;ptr = ptr->next;}}}if( n == 2 ){for( i=0;inext->next;qtr = head->next;for( j=0;jsubject[1].score subject[1].score ){temp_num = qtr->num;strcpy(temp_name,qtr->name);temp0 = qtr->subject[0].score;temp1 = qtr->subject[1].score;temp2 = qtr->subject[2].score;qtr->num = ptr->num;strcpy(qtr->name,ptr->name);qtr->subject[0].score = ptr->subject[0].score;qtr->subject[1].score = ptr->subject[1].score;qtr->subject[2].score = ptr->subject[2].score;ptr->num = temp_num;strcpy(ptr->name,temp_name);ptr->subject[0].score = temp0;ptr->subject[1].score = temp1;ptr->subject[2].score = temp2;}qtr = qtr->next;ptr = ptr->next;}}}if( n == 3 ){for( i=0;inext->next;qtr = head->next;for( j=0;jsubject[2].score subject[2].score ){temp_num = qtr->num;strcpy(temp_name,qtr->name);temp0 = qtr->subject[0].score;temp1 = qtr->subject[1].score;temp2 = qtr->subject[2].score;qtr->num = ptr->num;strcpy(qtr->name,ptr->name);qtr->subject[0].score = ptr->subject[0].score;qtr->subject[1].score = ptr->subject[1].score;qtr->subject[2].score = ptr->subject[2].score;ptr->num = temp_num;strcpy(ptr->name,temp_name);ptr->subject[0].score = temp0;ptr->subject[1].score = temp1;ptr->subject[2].score = temp2;}qtr = qtr->next;ptr = ptr->next;}}}//输出排序过后的链表ptr = head->next;while( ptr != NULL ){printf("%03d %s %s %5.2f %s %5.2f %s %5.2f
", ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score, ptr->subject[1].name,ptr->subject[1].score, ptr->subject[2].name,ptr->subject[2].score);ptr = ptr->next;}}//保存文件并退出,文件操作void SaveQuit(pstu x) {pstu head,ptr;FILE *fp;char filename[] = "D:\\编程学习\\编程实践\\c语言课程设计1 学生信息管理\\data.txt";head = x;ptr = head->next;if( NULL == (fp = fopen(filename,"w")) ) //判断文件是否存在及可读{ printf("error!"); exit(0); } while(ptr != NULL)//遍历链表结点,按data约定格式输出数据{fprintf(fp,"%03d %s %s %5.2f %s %5.2f %s %5.2f",ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,

/**********************************************
*File Name:StuHead.h *
*Created:07/11/28 *
*Author:Wen He *
*Description:此文件的指责是程序的头文件描述 *
**********************************************/

/*引入头文件*/
#include
#include
#include

#define MAXSIZE 100 /*定义学生人数*/
#define MAXSUB 4 /*定义课程数目*/
int length; /*定义学生的实际人数*/

/*定义学生结构体*/
typedef struct tagStudent_t
{
char no[11]; /*学号*/
char name[20]; /*姓名*/
int score[MAXSUB];/*各科成绩*/
int sum; /*总分*/
float average; /*平均分*/
}Student;

/*函数声明*/
char menu_select();
void input(Student stuArray[]);
void output(Student stuArr[]);
void search(Student stuAray[]);
int searchByNo(Student stuArr[]);
void searchByName(Student stuArr[]);
void update(Student stuArray[]);
void delete(Student stuArray[]);

----------------------以上是头文件

/**********************************************
*File Name:stuMain.c *
*Created:07/11/28 *
*Author:Wen He *
*Description:此程序的指责为程序的入口,主函数 *
***********************************************/

#include "stuHead.h"

void main()
{
Student stus[MAXSIZE];
while(1)
{
switch(menu_select())
{
case '1':
input(stus);
break;
case '2':
update(stus);
printf("按任意键继续…");
fflush(stdin);
getchar();
break;
case '3':
search(stus);
printf("按任意键继续…");
fflush(stdin);
getchar();
break;
case '4':
delete(stus);
printf("按任意键继续…");
fflush(stdin);
getchar();
break;
case '5':
output(stus);
printf("按任意键继续…");
fflush(stdin);
getchar();
break;
case '0':
printf("
谢谢使用!
");
exit(0);
}
}
}

以上是MAIN

下面是主程序

/**********************************************
*File Name:stuFun.c *
*Created:07/11/28 *
*Author:Wen He *
*Description:此程序的指责为各函数的定义 *
***********************************************/

#include "stuHead.h"

/**********************************************
*Function Name:menu_select
*Description:菜单选择
*Date:07/11/28
*parameter:无
*Author:Wen He
***********************************************/
char menu_select()
{
char MenuItem;

printf("
");
printf(" | *********学生成绩管理系统********* |
");
printf(" | ---------------------------------- |
");
printf(" | 主菜单项 |
");
printf(" | ---------------------------------- |
");
printf(" | 1 --- 录入学生信息 |
");
printf(" | 2 --- 修改学生信息 |
");
printf(" | 3 --- 查询学生信息 |
");
printf(" | 4 --- 删除学生成绩 |
");
printf(" | 5 --- 显示学生信息 |
");
printf(" | 6 --- 统计学生成绩 |
");
printf(" | 0 --- 退出系统 |
");

do
{
printf("
请输入选项(0-5):");
fflush(stdin);
scanf("%c",&MenuItem);
getchar();
}while(MenuItem'5');

return MenuItem;
}

/**********************************************
*Function Name:input
*Description:输入学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void input(Student stuArray[])
{
int i,j,k;
char cContinue;
int flag=1;
fflush(stdin);
for(i=length;i<MAXSIZE-1;i++)
{
printf("请输入第%d名学生的学号:",i+1);
scanf("%s",&stuArray[i].no);
if(i>0)
{
for(k=0;k<length;k++)
if(strcmp(stuArray[k].no,stuArray[i].no)==0)
break;
if(k<length)
{
i--;
printf("学号不能重复,请重新输入!");
continue;
}
}
printf("请输入姓名:");
scanf("%s",&stuArray[i].name);
for(j=0;j<MAXSUB;j++)
{
printf("请输入第%d门成绩:",j+1);
scanf("%d",&stuArray[i].score[j]);
if(stuArray[i].score[j]>100||stuArray[i].score[j]<0)
{
printf("错误数据,请重新输入!");
j--;
}
}
stuArray[i].sum=0;
for(j=0;j<MAXSUB;j++)
stuArray[i].sum+=stuArray[i].score[j];
stuArray[i].average=(float)stuArray[i].sum/MAXSUB;
length++;
do
{
flag=1;
fflush(stdin);
printf("需要继续录入吗?(Y/N)");
scanf("%c",&cContinue);
getchar();
switch(cContinue)
{
case 'Y':
case 'y':
flag=0;
break;
case 'N':
case 'n':
return;
}
}while(flag);
}
}

/**********************************************
*Function Name:output
*Description:输出学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void output(Student stuArray[])
{
int i,j;
printf("| 学号 | 姓名 | 成绩1 | 成绩2 | 成绩3 | 成绩4 | 总分 | 平均分 |
");
printf("|------|--------------|-------|-------|-------|-------|------|--------|
");
for(i=0;i<length;i++)
{
printf("|%-6s|%-14s|", stuArray[i].no,stuArray[i].name);
for(j=0;j<MAXSUB;j++)
printf("%7d|", stuArray[i].score[j]);
printf("%7d%7.2f
",stuArray[i].sum, stuArray[i].average); /*输出数组中当前学生的信息*/
}
}

/**********************************************
*Function Name:search
*Description:查询学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void search(Student stuArray[])
{
char menuItem;
printf("


"); /*输出三个空行*/
/*---------输出菜单界面开始-----------*/
printf(" | --------------------------------------------|
");
printf(" | 查询子菜单项 |
");
printf(" | --------------------------------------------|
");
printf(" | 1---学号查询 |
");
printf(" | 2---姓名查询 |
");
printf(" | 0---返回主菜单 |
");
printf(" | --------------------------------------------|
");
/*----------菜单界面输出结束-----------*/
do
{
printf("
请输入菜单项数字(0~2):");
fflush(stdin);
scanf("%c",&menuItem);
getchar();
}while(menuItem'2');
switch(menuItem)
{
case '1':
searchByNo(stuArray);
break;
case '2':
searchByName(stuArray);
break;
}
return;
}

/**********************************************
*Function Name:searchByNo
*Description:按学号查询学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
int searchByNo(Student stuArray[])
{
char no[20];
int i;
printf("
请输入学生的学号:");
scanf("%s",no);
for(i=0;i<length;i++)
if(strcmp(stuArray[i].no,no)==0)
break;
if(i==length)
printf("您输入的学号不存在!
");
else
{
printf("| 学号 | 姓名 | 成绩1 | 成绩2 | 成绩3 | 成绩4 | 总分 | 平均分 |
");
printf("|------|--------------|-------|-------|-------|-------|------|--------|
");
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|
", stuArray[i].no,stuArray[i].name,
stuArray[i].score[0], stuArray[i].score[1], stuArray[i].score[2], stuArray[i].score[3],
stuArray[i].sum, stuArray[i].average); /*输出数组中当前学生的信息*/
}
return i;
}

/**********************************************
*Function Name:searchByName
*Description:按姓名查询学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void searchByName(Student stuArray[])
{
Student stu[10];
char searchName[20];
int i,j,k;
printf("
请输入要查询学生的姓名:");
scanf("%s",searchName);
for(i=0,j=0;i<length;i++)
if(strcmp(stuArray[i].name,searchName)==0)
{
strcpy(stu[j].no,stuArray[i].no);
strcpy(stu[j].name,searchName);
for(k=0;k<4;k++)
stu[j].score[k]=stuArray[i].score[k];
stu[j].sum=stuArray[i].sum;
stu[j].average=stuArray[i].average;
j++;
}
if(j==0)
printf("您输入的姓名不存在!
");
else
{
printf("| 学号 | 姓名 | 成绩1 | 成绩2 | 成绩3 | 成绩4 | 总分 | 平均分 |
");
printf("|------|--------------|-------|-------|-------|-------|------|--------|
");
for(i=0;i<j;i++)
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|
", stu[i].no,stu[i].name,
stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3],
stu[i].sum, stu[i].average); /*输出数组中当前学生的信息*/
}
}



/**********************************************
*Function Name:update
*Description:修改学生信息
*parameter:stuArray[MAXSIZE]
*Date:07/11/28
*Author:Wen He
***********************************************/
void update(Student stuArray[])
{
char answer;
int i,j;
i=searchByNo(stuArray);
if(i<length)
{
do
{
printf("您要修改的是以上记录吗?(Y/N)");
fflush(stdin);
scanf("%c",&answer);
getchar();
}while(answer!='Y'&&answer!='N'&&answer!='y'&&answer!='n');
if(answer=='Y'||answer=='y')
{
printf("请输入姓名:");
scanf("%s",stuArray[i].name);
stuArray[i].sum=0;
for(j=0;j<MAXSUB;j++)
{
printf("请输入第%d门课程的成绩:",j+1);
scanf("%d",&stuArray[i].score[j]);
stuArray[i].sum+=stuArray[i].score[j];
}
stuArray[i].average=(float)stuArray[i].sum/MAXSUB;
printf("您修改后的信息如下:
");
printf("| 学号 | 姓名 | 成绩1 | 成绩2 | 成绩3 | 成绩4 | 总分 | 平均分 |
");
printf("|------|--------------|-------|-------|-------|-------|------|--------|
");
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|
", stuArray[i].no,stuArray[i].name,
stuArray[i].score[0], stuArray[i].score[1], stuArray[i].score[2], stuArray[i].score[3],
stuArray[i].sum, stuArray[i].average); /*输出数组中当前学生的信息*/

}
}
}

/**********************************************
*Function Name:delete
*Description:删除学生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void delete(Student stuArray[])
{
char answer;
int i,j;
i=searchByNo(stuArray);
if(i<length)
{
do
{
printf("您要删除的是以上记录吗?(Y/N)");
fflush(stdin);
scanf("%c",&answer);
getchar();
}while(answer!='Y'&&answer!='N'&&answer!='y'&&answer!='n');
if(answer=='Y'||answer=='y')
{
for(j=i;j<=length-1;j++)
stuArray[j]=stuArray[j+1];
printf("删除成功!");
length--;
}
}
}


#诸饲振# 学生C语言信息管理系统 -
(13033994970): #include <stdio.h>

#诸饲振# C语言学生信息管理系统设计 -
(13033994970): [此问题的推荐答案]#include "stdio.h" #include "stdlib.h" #include "string.h" int shoudsave=0; /* */ struct student { char num[10];/* ...

#诸饲振# 如何用C语言编写学生信息管理系统 -
(13033994970): 参考如下学生信息管理系统的C源代码吧.#include <stdio.h>#include <string.h>/*定义学生结构体*/ struct Student { char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average; };/*声明学生数组及学生数量*/ struct Student ...

#诸饲振# 用C++编写一个程序 学生信息管理系统 -
(13033994970): #include#include#include#include#defineMax 1000usingnamespacestd;classstudent{private: char name[20]; int number; int grade;public: student(char*,int,int); char*GetName(){returnname;} int GetNo(){returnnumber;} int GetGra(){returngrade;}};...

#诸饲振# 制作一个简单的c - 如何用C语言制作一个简单的学生信息管理系统?要求很简单,能输入和
(13033994970): 你只要用C语言中的结构体数据类型就可以实现了; 结构体就是建立象数据库中类似属性的东西,把学生定义成一个类型,如: struct stu{ char name[8]; int age; int number; float height; }; 这样就可以把stu看成是类似int的数据类型来定义学生变量; 至于要做界面窗口我觉得还是用VC比较好;

#诸饲振# 用C++语言编写学生信息管理系统 -
(13033994970): 程序工作量不小,大概要两个多小时才能写好调好 请先付订金 ^_^ 下面是部分,付了订金我马上继续码,这种没有太大难度/*1.该系统采用面向对象的设计方法2.声明一个学生信息类studentmessage3.学生信息应包含学号,姓名,性别,年龄,...

#诸饲振# C语言中做成一个学生管理系统除了用文件还可以用什么啊??求解中 -
(13033994970): 学生信息是要保存的,用文件最好.文件格式多种多样,数据库也是其中之一.用二进制文件,以块格式存放,速度快,在文字处理软件中也打不开,有一定保密性.可以考虑文件头信息、块(记录)格式等,很灵活.

#诸饲振# 用c语言编写学生管理系统, -
(13033994970): 原发布者:沃流域滔#include"stdio.h"#include"stdlib.h"/*标准库函数*/#include"string.h"/*字符串操作函数*/#defineMAX5#definePAGE2#definePRINT1printf("--------------------------------------------------------------\n");#definePRINT2printf("...

#诸饲振# C语言学生信息管理系统 怎么做啊??高手帮忙啊
(13033994970): 跟别人问重复了,你们难道是一个老师教的啊? http://wenwen.sogou.com/z/q778529910.htm 网上很多类似的,你参考下: #include #include struct student { char name[30]; float math; float chinese; float english; float average; }; int MenuChoice(...