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

作者&投稿:谷翟 (若有异议请与网页底部的电邮联系)
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--;
}
}
}

#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语言制作一个简单实用菜单的程序。
getchar(); }void menu() \/\/主菜单{ system("cls"); \/\/清屏 printf("\\n\\t\\t\\t 菜单\\n"); printf("\\t\\t\\t#***#\\n"); printf("\\t\\t\\t# 1选择排序 #\\n"); printf("\\t\\t\\t# 2二分查找 #\\n"); printf("\\t\\t\\t# 3返回 #\\n")...

C语言制作程序利用结构数组输入3个人姓名年龄,并输出三人最年长者姓名年...
你好 具体过程如下:include<stdio.h> struct person{ char name[10];int age;};struct person p[3]={{"张三",18},{"李四",19},{"王五",20}};\/*初始化 p[3]各个成员*\/ int main(){ int i,max_age=0;for(i=0;i<3;i++){ printf("输入第%d个人的姓名:%s",i+1,p[i]....

用C语言制作一个小学算术运算测试
\\n以下是你刚才作的所有题目");for(i=0;i<10;++i){ printf("\\n%d %c %d = %d",num1[i],opt[i],num2[i],result[i]);} } int main(void){ char yesOrNo; \/*回答是否继续 *\/ test();do { printf("\\n你还想继续么(y\/n)?"); \/*决定是否继续 *\/ ...

仅用c语言能编出哪些小游戏?
可以编写狼追兔子游戏,掷骰子游戏,24点游戏,井字棋游戏,农夫过河游戏,扫雷小游戏,人机猜数游戏,三色球游戏, 推箱子游戏,坦克大战游戏,贪吃蛇游戏等。

用c语言 制作一个加法运算器 跪求
for (int j=i-1; j>=*start; j--){ num = num + (str[j]-'0')*k;k = k*10;} start = i+1;return num;} void Menu(){ char str[100] = "1111+2222+3333+4444";int start=0;int num=0;int sum=0;char choice;printf("是否使用例子式子(Y\/N)");scanf("%c",&...

用C语言制作一个班级成绩管理系统
\/* 2。用input函数从键盘上输入10个学生的数据。 *\/ void input(){ int i = 0;printf("Input the students' infomation(FORMAT LIKE:No Name score1 score2 score3):\\n");while(i < 10){ printf("Input %d:",i + 1);scanf("%s%s%f%f%f",stu[i].stuNo,stu[i].stuName...

用C语言设计能够完成多步四则运算的程序
[关键词]多用计算器;设计 数值计算可以说是日常最频繁的工作了,WIN98提供了“计算器”软件供用户使用,该软件可以处理一般的一步四则运算,例如:3+2、5\/3等等,但在日常中用户经常遇到多步四则运算问题,例如:3+4*5-4\/2,45*34\/2+18*7等等,那么该个计算器就无法胜任了,作者制作了一个...

求用C语言制作一个简单软件完整的学习流程
c语言编译程序属于系统软件。编译程序(Compiler,compilingprogram)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。这里的编译程序是一种动作,是根据编译原理技术,由高级程序设计语言编译器翻译成机器语言二进制代码行为,因此它是系统软件。

怎样用c语言编写俄罗斯方块程序?
怎样用c语言编写俄罗斯方块程序?  我来答 2个回答 #热议# 该不该让孩子很早学习人情世故?小女子刚及笄 2020-03-27 · TA获得超过438个赞 知道小有建树答主 回答量:406 采纳率:100% 帮助的人:48.7万 我也去答题访问个人页 关注 展开全部 俄罗斯方块C源代码 #include <stdio.h> #include ...

教你如何使用C语言编写简单小游戏
这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序:#incolude \/*把输入输出函数的头文件包含进来*\/int main(){printf("...

白水县13869666810: 用C语言编写一个学生信息管理系统
望雁银翘: #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" jiemian();struct student { char name[50]; char sex[5]; int age; char num[50]; float score1; float score2; float score3; float sum; float ave;}stu[50],del; void gn1() {int...

白水县13869666810: 如何用C语言编写学生信息管理系统 -
望雁银翘: 参考如下学生信息管理系统的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 ...

白水县13869666810: c语言程序设计:学生信息管理系统设
望雁银翘: 1.录入2.显示3.排序4.查询5.修改6.删除7.退出 学号","姓名","成绩一","成绩二","平均成绩

白水县13869666810: 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(...

白水县13869666810: 用C语言编写一个学生管理系统
望雁银翘: 我有源程序,你能给多少分? 题目: 1、用C语言实现基于Dos操作系统的“学生成绩管理系统”. 2、系统启动进入后,弹出“学生成绩管理系统”的用户界面,用户通过界面选择成绩管理系统的各种功能,包括“退出”功能.(5分) 3、用户...

白水县13869666810: 用C语言编写一个学生管理系统怎么做???求助~谢谢 -
望雁银翘: 主要就是插入,删除,查询,保存和读取我知道 然后学生信息由struct来定义储存,但是能否具体一些?比如: 要保存学生的那些功能?

白水县13869666810: C语言编写学员信息管理系统
望雁银翘: #include <stdio.h> #include <stdlib.h> #include <conio.h> struct student { int no; char name[20]; float score[2]; float avg; }; struct student input(); //单个学员信息录入 void display(struct student [],int); //显示所有学员信息 void sort(struct student [],int...

白水县13869666810: 学生信息管理系统C语言怎么做 -
望雁银翘: 跟别人问重复了,你们难道是一个老师教的啊? 网上很多类似的,你参考下:#include <stdio.h>#include <string.h> struct student { char name[30]; float math; float chinese; float english; float average; }; int MenuChoice(void); int EnterAccount(void);...

白水县13869666810: 用c语言做一个学生管理系统 -
望雁银翘: struct stu {char a[10]; int i; int j; int k; int m; int n; int x; }; int sum(struct stu p) {int sum=p.i+p.j+p.k+p.m+p.n; return sum;} main() {struct stu p[6],ac; int l,a[6],b; for(l=0;l{scanf("%s%d%d%d%d%d",p[l].a,&p[l].i,&p[l].j,&p[l].k,&p[l].m,&p[l].n); p[l].x=sum(p[l])...

白水县13869666810: C语言编写一个学生信息管理系统,求原代码谢谢
望雁银翘: #include <iostream> #include "conio.h" #include "malloc.h" #include "windows.h" using namespace std; typedef struct { char name[20]; int stunum; int score; }StuElem;class StuList { private: StuElem *StuElem1; int Length; int MaxContine; ...

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