对于刚学完C的小伙伴来说,做一个学生教务管理系统肯定是一个不错的巩固项目,废话不多说,直接上代码

第一步来写一个main()方法

int main()
{//这是一个清屏函数可以把黑窗口上面的内容全部清除掉system("cls");//这是我定义的菜单函数,记住这是一个菜单就可以了display();//定义一个字符型变量,来进行选择,其实用整形更好//用字符型输入会因为可以形成一个问题可以让我们巩固,具体什么问题呢,接下来在告诉你们char a;//输出提示信息,对a进行输入,然后用switch来进行选择printf("第一次使用请先选1增加学生信息:");scanf("%c",&a);//循环,条件为1是为了保证程序可以一直运行下去while(1){//下面对a进行判断,然后来执行各种方法:后面的都是对应的方法switch(a){case '0':break;case '1':addstudent();break;case '2':aver_score();break;case '3':print_();break;case '4':sort();break;case '5':seek();break;case '6':del();break;case '7':all_score();break;}//判断a是否等于零,来判断是否结束程序if(a=='0'){printf("即将退出程序!");break;}printf("请输入你的选择:");//fflush(stdin),这个是清楚缓冲区的函数,因为我们输出数据的时候,总是会有一个回车键//留在缓冲区里面,所以我们呢需要借助这个函数来清除一下,不然的话或导致莫名奇妙执行下一步       // 的操作fflush(stdin);scanf("%c",&a);}return 0;
}

接着定义结构体,初始化四个变量,然后我们每次运行程序的时候就可以直接对这四个成员信息进行操作,不用我们每次操作都需要输入学生信息,这样很麻烦,这些都是全局变量,包括后面的num是为了统计总人数的

struct student
{char ID[20];char name[20];int eng,math,C;float ave;
};
struct student stu[1000]={{"0","甲",89,89,98},{"1","乙",98,78,77},{"2","丙",89,87,77},{"3","丁",88,89,98}};
int num=4;

下一步就是对每一个函数的实现了

注意:我们把函数都写得主函数前面这样就可以不用对函数进行声明,省去很多麻烦的函数声明过程

首先我们来看菜单函数


void display()
{printf("                                         *欢迎使用学生成绩管理系统*              \n");printf("\n");printf("************************************************************************************************************************\n");printf("\n");printf("*                      请用户根据以下提示进行操作(温馨提示:请在成绩录入后再使用其它功能)                              *\n");printf("\n");printf("************************************************************************************************************************\n");printf("\n");printf("                                      0.退出系统             1.信息录入      \n\n");printf("                                      2.计算平均成绩         3.查看所有学生信息\n\n");printf("                                      4.排序                 5.学生查找      \n\n");printf("                                      6.删除学生信息         7.修改学生信息  \n\n");printf("************************************************************************************************************************\n");printf("\n");printf("                                               *如需退出系统请按0*                                      \n");
}

这个菜单可以自己根据自己的想法来设计的,然后我们就要对整个程序最主要的函数进行实现了

信息录入功能的实现,也就是添加学生函数的实现


void addstudent()
{//这个地方一样,定义一个变量对这个变量进行选择char ch;//清屏,输出菜单函数system("cls");display();printf("退出请按n");printf("\n按任意键继续,请输入你的选择:");//清空之前输入留下的空格键,或者输出很多的数据造成溢出的那些数据,最好是在每一个scanf函数前面都加一个fflush(stdin);scanf("%c",&ch);switch(ch){//输出n可以结束掉这个函数,比如不想继续了,就直接结束掉case 'n':break;default :while(1){int x=0;int i;printf("请输入姓名:");//接下来的输入与输出,有些前面带了取地址符&有的没有带,你们知道是为什么嘛?//是因为结构体声明时,这些声明的是一个字符型数组,数组名本身就是一个地址//所以不需要带取地址符号scanf("%s",stu[num].name);printf("请输入学号:");scanf("%s",stu[num].ID);for(i=0;i<num;i++){//遍历,看看有没有学号冲突的if(strcmp(stu[i].ID,stu[num].ID)==0) {x++;break;}}if(x!=0){printf("该学号学生信息已存在,需要重新输入信息!");}else{printf("请输入英语成绩:");scanf("%d",&stu[num].eng);printf("请输入数学成绩:");scanf("%d",&stu[num].math);printf("请输入C成绩:");scanf("%d",&stu[num].C);stu[num].ave=(stu[num].eng+stu[num].math+stu[num].C)/3.0;num++;}printf("如果要退出,请按n,按任意键继续输入:");getchar();if(getchar()=='n'){printf("即将返回主菜单!");break;}}}
}

求所有学生平均成绩


void aver_score()
{system("cls");display();int i;float aver,s1,s2,s3;//遍历,然后求和,在对总人数求平均for(i=0;i<num;i++){aver=aver+stu[i].ave;s1=s1+stu[i].eng;s2=s2+stu[i].math;s3=s3+stu[i].C;stu[i].ave=(stu[i].eng+stu[i].math+stu[i].C)/3.0;}aver=aver/num;s1=s1/num;s2=s2/num;s3=s3/num;printf("全校平均成绩为:%f\n",s1);printf("全校英语平均成绩为:%f\n",s2);printf("全校数学平均成绩为:%f\n",s3);
}

查看所有学生信息


void print_()
{system("cls");display();int i;printf("---------------------------------------------------------------------------------------\n");printf("\n姓  名        学  号        英语成绩        数学成绩       C  成绩        平均分       \n");printf("---------------------------------------------------------------------------------------\n");printf("\n"); for(i=0;i<num;i++){printf("%-6s        %s             %-8d        %-8d       %-8d       %f\n",stu[i].name,stu[i].ID,stu[i].eng,stu[i].math,stu[i].C,stu[i].ave);}
}

排序

void sort()
{ system("cls");display();char m;printf("-----------------------------------------------------\n");printf("\n");printf("1.按照学号大小排序\n");printf("2.按照名字拼音排序\n");printf("3.按照成绩大小排序\n");printf("4.返回主菜单\n");printf("请输入你的选择:");fflush(stdin);scanf("%c",&m);//接下来,我们对某不同功能函数的实现,也就是下面的sort1,sort2,sort3switch(m){case '1':sort1();break;case '2':sort2();break;case '3':sort3();break;default:break;}
}

对排序特殊功能函数的实现(都是冒泡排序,我就不多说了)


void sort1()
{int i,j,x;struct student st;for(i=0;i<num-1;i++){x=0;for(j=0;j<num-1-i;j++){if(strcmp(stu[j].ID,stu[j+1].ID)>0){st=stu[j];stu[j]=stu[j+1];stu[j+1]=st;x++;}}if(x==0) break;}print_();
}
void sort2()
{int i,j,x;struct student st;for(i=0;i<num-1-i;i++){x=0;for(j=0;j<num-1-i;j++){if(strcmp(stu[j].name,stu[j+1].name)>0){st=stu[j];stu[j]=stu[j+1];stu[j+1]=st;x++;}}if(x==0) break;}print_();
}
void sort3()                      //冒泡排序为下面的排序菜单准备
{int i,j,x;struct student st;for(i=0;i<num-1;i++){x=0;for(j=0;j<num-1-i;j++){if(stu[j].ave<stu[j+1].ave){st=stu[j];stu[j]=stu[j+1];stu[j+1]=st;x++;}}if(x==0)break;}print_();} 

搜索学生信息函数的实现

void seek()
{system("cls");display();char name[20];int i;printf("请输入你要查找学生信息的名字或者学号:");fflush(stdin);scanf("%s",name);//前面的就不多说了,后面的只用了一个for循环,然后就是上面输入学号姓名都是用一个数组来接的//为什么?是因为下面for循环都会有对应的,不管是你输入的是姓名name,还是学号ID,下面都if-else//语句来选择,然后就是判断字符串是否相等的strcmp()可以在网上搜索一下用法for(i=0;i<num;i++){if(strcmp(stu[i].name,name)==0){printf("---------------------------------------------------------------------------------------------------------------\n");printf("\n姓  名        学  号        英语成绩        数学成绩       C  成绩        平均分       \n");printf("------------------------------------------------------------------------------------------------------------------\n");printf("\n"); printf("%-6s        %s             %-8d        %-8d       %-8d       %f\n",stu[i].name,stu[i].ID,stu[i].eng,stu[i].math,stu[i].C,stu[i].ave);}else if(strcmp(stu[i].ID,name)==0){printf("----------------------------------------------------------------------------------------------------------------------\n");printf("\n姓  名        学  号        英语成绩        数学成绩       C  成绩        平均分       \n");printf("-------------------------------------------------------------------------------------------------------------------\n");printf("\n"); printf("%-8s        %-8s        %-8d        %-8d        %-8d        %f",stu[i].name,stu[i].ID,stu[i].eng,stu[i].math,stu[i].C,stu[i].ave);}}
}

删除学生信息(有了上面这些的基础了,下面的不就很简单了我就不多说了)


void del()
{   system("cls");display();int i,j;char a,name[20];printf("1.清空所有学生信息\n");printf("2.清空部分学生信息\n");printf("3.返回主菜单\n");printf("请输入你的选择:");fflush(stdin);scanf("%c",&a);while(1){switch(a){case '1':for(i=0;i<num;i++){for(j=0;j<num-i;j++){stu[j]=stu[j+1];}}num=0;printf("清除完毕!");break;case '2':printf("请输入你要清空学生的学号:");fflush(stdin);scanf("%s",name);int x=0;for(i=0;i<num;i++){if(strcmp(name,stu[i].ID)==0){for(j=i;j<num;j++)stu[j]=stu[j+1];printf("清除完毕!");x++;num--;}}if(x==0) printf("没有此学生信息!");break;case '3':break;}if(a=='3') break;printf("按3返回主菜单,按任意键继续删除");fflush(stdin);scanf("%c",&a);if(a=='3') break;}
}

清空学生信息


void all_score()
{system("cls");display();int i,j;char a,name[20];while(1){printf("1.清空所有学生成绩\n");printf("2.清除部分学生成绩\n");printf("3.修改学生信息\n");printf("4.返回主菜单"); printf("请输入你的选择:");fflush(stdin);scanf("%c",&a);switch(a){case '1':for(i=0;i<num;i++){stu[i].eng=0;stu[i].math=0;stu[i].C=0;stu[i].ave=0.0;}printf("清除完毕!");break;case '2':printf("请输入要删除学生的姓名或者学号:");fflush(stdin);scanf("%s",name); int i=0,y;for(i=0;i<num;i++){if(strcmp(stu[i].name,name)==0){stu[i].eng=0;stu[i].math=0;stu[i].C=0;stu[i].ave=0.0;y++;}else if(strcmp(stu[i].ID,name)==0){stu[i].eng=0;stu[i].math=0;stu[i].C=0;stu[i].ave=0.0;y++;}}if(y==0) printf("没有该学生信息!");else printf("修改完成!");break;case '3':printf("请输入要修改学生的学号或者姓名:");fflush(stdin);scanf("%s",name);int x=0;for(i=0;i<num;i++){if(strcmp(stu[i].name,name)==0) {x++;printf("1.修改math\n");printf("2.修改english\n");printf("3.修改C\n"); printf("4.修改学号\n");printf("5.返回上一步\n");char b;fflush(stdin);printf("请输入你的选择:");scanf("%s",&b);switch(b){case '1':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].math);printf("修改完成!");break;case '2':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].eng);printf("修改完成!");break;case '3':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].C);printf("修改完成!");break;case '4':printf("请修改:");fflush(stdin);scanf("%d",stu[i].ID);printf("修改完成!");break;case '5':break;}}else if(strcmp(stu[i].ID,name)==0) {x++;printf("1.修改math\n"); printf("2.修改english\n");printf("3.修改C\n"); printf("4.修改学号\n");printf("5.返回上一步\n");char b;fflush(stdin);printf("请输入你的选择:");scanf("%s",&b);switch(b){case '1':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].math);printf("修改完成!");break;case '2':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].eng);printf("修改完成!");break;case '3':printf("请修改:");fflush(stdin);scanf("%d",&stu[i].C);printf("修改完成!");break;case '4':printf("请修改:");fflush(stdin);scanf("%d",stu[i].ID);printf("修改完成!");break;case '5':break;}}}if(x==0)printf("没有该学生信息!");break;case '4':break;}if(a=='4') break;}
}

看完是不是没有指针的内容,别着急,要懂得循序渐进

接下来,我们可以来试一下用链表来完成一个学生教务管理系统,作完下一个项目呢,我们就可以准备一下C二级了,很简单,买一套C二级真题,刷到80分以上基本上就是稳过了,我是做完之后

买了模拟题,模拟了两三套都是九十多分,就直接裸考了,最后考了八十多分,反正过了就可以了

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student{char name[20];char ID[20];float eng;float math;float C;float add;
};//定义一个结构体
struct Node{struct student stud;struct Node *next;
};//定义一个链表
//全局变量来计总人数
int num;
//链表的头指针
struct Node *head;
void display(){system("color 0");printf("\n");printf("\t\t\t             *欢迎使用学生成绩管理系统*                    \n");printf("\t\t\t+-------------------------------------------------------+\n");printf("\t\t\t|        *请用户根据以下提示进行操作*                   |\n");printf("\t\t\t+-------------------------------------------------------+\n");printf("\t\t\t|*******************************************************|\n");printf("\t\t\t|     0.退出系统             1.信息录入                 |\n");printf("\t\t\t|                                                       |\n");printf("\t\t\t|     2.计算平均成绩         3.查看所有学生信息         |\n");printf("\t\t\t|                                                       |\n");printf("\t\t\t|     4.排序                 5.学生查找                 |\n"); printf("\t\t\t|                                                       |\n");               printf("\t\t\t|     6.删除学生信息         7.修改学生信息             |\n");  printf("\t\t\t|                                                       |\n");                printf("\t\t\t+-------------------------------------------------------+\n");printf("\t\t\t|    温馨提示:请在成绩录入后再使用其它功能             |\n");               printf("\t\t\t+-------------------------------------------------------+\n");printf("\t\t\t                 *如需退出系统请按0*                     \n\n\n");
}
//创建表头
struct Node *creatList(){struct Node *headNode=(struct Node *)malloc(sizeof(struct Node));headNode->next=NULL;return(headNode);
}//判断有无改学号与之重复的
int isHaveId(char ID[]) {struct Node *p = head->next;while( p != NULL){if(strcmp(p->stud.ID, ID) == 0){return 1;}p = p->next;}return 0;
} //创建结点
struct Node *creatNode(){struct Node *newNode=(struct Node *)malloc(sizeof(struct Node));printf("请输入姓名:");scanf("%s",newNode->stud.name);printf("请输入学号:");scanf("%s",newNode->stud.ID);int i = isHaveId(newNode->stud.ID);if( i == 1){printf("有学号与之重复\n");printf("退出该菜单\n");return;}printf("请输入英语成绩:");scanf("%f",&newNode->stud.eng);printf("请输入数学成绩:");scanf("%f",&newNode->stud.math);printf("请输入C成绩:");scanf("%f",&newNode->stud.C);newNode->stud.add=newNode->stud.C+newNode->stud.eng+newNode->stud.C;newNode->next=NULL;num++;return(newNode);
}//添加成员
void add(){system("cls");display();struct Node *p1, *p2;p1=head->next;p2=creatNode();if(p2 != NULL){head->next = p2;head->next->next=p1;}
}
//求全校平均成绩
void averscore(){system("cls");display();int i;float a1=0,a2=0,a3=0;struct Node *p1=head->next;if(p1 == NULL){printf("没有学生信息!!!");return;}while(p1){a1=a1+p1->stud.eng;a2=a2+p1->stud.math;a3=a3+p1->stud.C;i++;p1=p1->next;}a1=a1/i;a2=a2/i;a3=a3/i;printf("全校英语平均成绩为:%-.2f\n",a1);printf("全校数学平均成绩为:%-.2f\n",a2);printf("全校C平均成绩为:%-.2f\n",a3);} //查看所有学生信息
void printNode(){system("cls");display();struct Node *p1=head->next;int i;printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩     总分\n");printf("------------------------------------------------------------------------\n");while(p1){printf("%-12s%-12s%-.2f       %-.2f       %-.2f         %.2f\n",p1->stud.name,p1->stud.ID,p1->stud.eng,p1->stud.math,p1->stud.C,p1->stud.add);p1=p1->next;}
}
//相邻两个节点进行调换
//将两个结点的数据进行交换
void Exchange(struct Node *p1,struct Node *p2){char t[20];                                                 //通过字符串复制函数和中间变量t对姓名进行交换 strcpy(t,p1->stud.name);strcpy(p1->stud.name,p2->stud.name);strcpy(p2->stud.name,t);char te[20];                                                  //通过字符串复制函数和中间变量te对学号进行交换 strcpy(te,p1->stud.ID);strcpy(p1->stud.ID,p2->stud.ID);strcpy(p2->stud.ID,te);float a;a=p1->stud.eng;                                  //通过a为中间变量对英语成绩进行交换 p1->stud.eng=p2->stud.eng;p2->stud.eng=a;a=p1->stud.math;                                //通过a为中间变量对数学成绩进行交换 p1->stud.math=p2->stud.math;p2->stud.math=a;a=p1->stud.C;                                   //通过a为中间变量对C成绩进行交换 p1->stud.C=p2->stud.C;p2->stud.C=a;a=p1->stud.add;                                   //通过a为中间变量对总分进行交换 p1->stud.add=p2->stud.add;p2->stud.add=a;
} //写一个函数对链表结点进行自减操作,返回前一个节点的指向前一个节点的指针值
struct Node *Self_reduction(struct Node *p){struct Node *p1,*p2;p1=p2=head->next;int i;for(i=1;i<num;i++){p2=p1;p1=p1->next;if(p1==p) break;}return(p2);
}//写一个函数来返回结点的位置
int place(struct Node *p){int i;struct Node *q=head->next;for(i=1;i<num;i++){if(q==p) break;else q=q->next;}return i;
}
//对学生进行排序//按照学号排序
void sort1() {int i=1,j=num,x;struct Node *p1,*p2;p1=head->next;for(i=1;i<num;i++){p1=p2=head->next;for(j=1;j<num-i+1;j++){p2=p1;p1=p1->next;if(strcmp(p2->stud.ID,p1->stud.ID)>0){Exchange(p1,p2);}}}printNode();
}//按照姓名拼音排序
void sort2(){int i=1,j=num,x;struct Node *p1,*p2;p1=head->next;for(i=1;i<num-1;i++){x=0;p1=p2=head->next;for(j=1;j<num-i+1;j++){p2=p1;p1=p1->next;if(strcmp(p2->stud.name,p1->stud.name)>0){Exchange(p1,p2); }}}printNode();
}//按照总成绩排序
void sort3() {int i=1,j=num,x;struct Node *p1,*p2;p1=head->next;for(i=1;i<num-1;i++) {x=0;p1=p2=head->next;for(j=1;j<num-i+1;j++) {p2=p1;p1=p1->next;if(p1->stud.add>p2->stud.add) {Exchange(p1,p2);x++;}}}printNode();
}//最后通过这个函数对上面的排序功能进行总结
void sort() {system("cls");display();printf("\n1.按照学号排序");printf("\n2.按照姓名拼音排序");printf("\n3.按照总分排序");printf("\n请输入你的选择:");char z;fflush(stdin);scanf("%c",&z);switch(z){case '1':sort1();break;case '2':sort2();break;case '3':sort3();break;default:printf("\n请输入1-3之内的数!");}printf("按任意键返回主菜单:");getchar();
}void insertinfobyID_name(){system("cls");display();int x=0;char name[20];struct Node *p1=head->next;printf("请输入要查找人的姓名或者学号:");scanf("%s",name);while(p1){if((strcmp(name,p1->stud.name))==0){printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩     总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-.2f       %-.2f       %-.2f       %-.2f",p1->stud.name,p1->stud.ID,p1->stud.eng,p1->stud.math,p1->stud.C,p1->stud.add);x++;break;}else if(strcmp(name,p1->stud.ID)==0){printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩     总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-.2f       %-.2f       %-.2f       %-.2f",p1->stud.name,p1->stud.ID,p1->stud.eng,p1->stud.math,p1->stud.C,p1->stud.add);x++;break;}p1=p1->next;}if(x==0) printf("没有此人信息!");
}
//删除学生信息
void del(){system("cls");display();printf("请输入删除人的学号或姓名:");char name[20];scanf("%s",name);getchar();struct Node *p=head->next;while(1){if(strcmp(name,p->stud.name)==0){printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩     总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-12.2f%-12.2f%-12.2f%-12.2f",p->stud.name,p->stud.ID,p->stud.eng,p->stud.math,p->stud.C,p->stud.add);      char a;printf("\n请确认是否删除,取消删除请按n,按任意键继续删除");scanf("%c",&a);if(a=='n'){printf("即将返回主菜单!按任意键继续");getchar();return;}else{struct Node *q;q=p->next;p=Self_reduction(p);p->next=q;printf("删除成功!按任意键返回主菜单");getchar();return;}}else if(strcmp(name,p->stud.ID)==0){printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩       总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-12.2f%-12.2f%-12.2f%-12.2f",p->stud.name,p->stud.ID,p->stud.eng,p->stud.math,p->stud.C,p->stud.add);     char a;printf("\n请确认是否删除,取消删除请按n,按任意键继续删除");scanf("%c",&a);if(a=='n'){printf("\n即将返回主菜单!按任意键继续");getchar();return;}else{struct Node *q;q=p->next;p=Self_reduction(p);p->next=q;printf("删除成功!按任意键返回主菜单");getchar();return;}}p=p->next;}
}void modify(){system("cls");display();printf("请输入要修改学生的姓名或者学号:");char name[20];scanf("%s",name);getchar();int x;struct Node *p=head->next;;while(1){if(strcmp(name,p->stud.name)==0){x++;printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩       总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-12.2f%-12.2f%-12.2f%-12.2f",p->stud.name,p->stud.ID,p->stud.eng,p->stud.math,p->stud.C,p->stud.add);printf("\n请确认是否修改,按n返回主菜单,按任意键继续修改,请输入你的选择:");char c;scanf("%c",&c);if(c=='n') break;printf("\n1.学号修改");printf("\n2.姓名修改");printf("\n3.英语成绩修改");printf("\n4.数学成绩修改");printf("\n5.C成绩修改");printf("\n请输入你的选择:");char ch;scanf("%c",&ch);char w;if(ch=='1'){w++;printf("请输入学号:");scanf("%s",p->stud.ID);}else if(ch=='2'){w++;printf("请输入姓名:");scanf("%s",p->stud.name);}else if(ch=='3'){w++;printf("请输入英语成绩:");scanf("%f",&p->stud.eng);p->stud.add=p->stud.C+p->stud.eng+p->stud.math; }else if(ch=='4'){w++;printf("请输入数学成绩:");scanf("%f",&p->stud.math);p->stud.add=p->stud.C+p->stud.eng+p->stud.math;}else if(ch=='5'){w++;printf("请输入C成绩:");scanf("%f",&p->stud.C);p->stud.add=p->stud.C+p->stud.eng+p->stud.math;}elseprintf("请输入1-5内的数字!");if(x!=0){printf("\n修改成功!");}}else if(strcmp(name,p->stud.ID)==0){x++;printf("------------------------------------------------------------------------\n");printf("姓名        学号        英语成绩    数学成绩    C成绩       总分\n");printf("------------------------------------------------------------------------\n");printf("%-12s%-12s%-12.2f%-12.2f%-12.2f%-12.2f",p->stud.name,p->stud.ID,p->stud.eng,p->stud.math,p->stud.C,p->stud.add);printf("\n请确认是否修改,按n返回主菜单,按任意键继续修改,请输入你的选择:");char c;scanf("%c",&c);if(c=='n') break;printf("\n1.学号修改");printf("\n2.姓名修改");printf("\n3.英语成绩修改");printf("\n4.数学成绩修改");printf("\n5.C成绩修改");printf("\n请输入你的选择:");char ch;fflush(stdin);scanf("%c",&ch);char w;if(ch=='1'){w++;printf("请输入学号:");scanf("%s",p->stud.ID);}else if(ch=='2'){w++;printf("请输入姓名:");scanf("%s",p->stud.name);}else if(ch=='3'){w++;printf("请输入英语成绩:");scanf("%f",&p->stud.eng);p->stud.add=p->stud.C+p->stud.eng+p->stud.math; }else if(ch=='4'){w++;printf("请输入数学成绩:");scanf("%f",&p->stud.math);p->stud.add=p->stud.C+p->stud.eng+p->stud.math;}else if(ch=='5'){w++;printf("请输入C成绩:");scanf("%f",&p->stud.C);p->stud.add=p->stud.C+p->stud.eng+p->stud.math;}elseprintf("请输入1-5内的数字!");if(x!=0){printf("\n修改成功!");}}if(x==0) p=p->next;elsebreak;}
}/*
写入文件操作
*/
void writeFile() {FILE *fp;struct Node *p = head->next;if((fp = fopen("data.txt","w")) == NULL) {printf("不能打开数据文件。\n");exit(1);}while(p) {fwrite(p,sizeof(struct Node),1,fp);p = p->next;}fclose(fp);
}/*
读取文件操作
*/
void readFile(){// 声明一个文件指针FILE* fp;struct Node *p, *q = head;if ((fp = fopen("data.txt", "r")) == NULL){printf("文件读取失败...");exit(1);}else {while(!feof(fp)){p = (struct Node *)malloc(sizeof(struct Node));fread(p, sizeof(struct Node), 1, fp);q->next = p;q = q->next;num++;}q = Self_reduction(q);q->next = NULL;num--; }fclose(fp); // 关闭文件流
}int main(){system("cls");display();char ch;head=creatList();readFile();printf("请输入你的选择:");scanf("%c",&ch);while(1){switch(ch){case '0':break;case '1':add();break;case '2':averscore();break;case '3':printNode();break;case '4':sort();break;case '5':insertinfobyID_name();break; case '6':del();break;case '7':modify();break;default:printf("\n请输入正确选项!");}if(ch=='0'){printf("\n即将退出程序,按任意键退出");fflush(stdin);getchar();break;}printf("\n请输入你的选择:");fflush(stdin);scanf("%c",&ch);}writeFile();return 0;
}

C语言学生教务管理系统结构体数组版本,跟着前面的项目做完之后可以看看最后的链表版本,也包括文件操作相关推荐

  1. C语言学生管理系统(结构体数组)

    简介 简单的学生管理系统,使用C语言编写. 功能 拥有增.删.改.查.打印.文件读写.搜索以及排序功能. 环境 推荐使用VS2015或以上版本(支持C11或以上)的编译器运行代码. 结构 数据结构为结 ...

  2. c语言学生成绩管理系统设计分析,参阅:C语言学生成绩管理系统设计

    <C语言学生成绩管理系统设计.doc>由会员分享,可免费在线阅读全文,更多与<C语言学生成绩管理系统设计>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜 ...

  3. c语言结构体老师信息管理系统,C语言课程设计职工信息管理系统结构体数组实现程序源代码.doc...

    word格式 整理版 学习参考 //C语言课程设计 职工信息管理系统-结构体数组实现 #include #include #include struct employee { char num[10] ...

  4. 【C语言结构体题】定义用于存储学生信息的结构体数组,输入学生的准考证号、姓名和成绩信息,计算总分,并按总分由高到低输出。

    在此基础上,增加下列功能函数 1.学生信息查询功能,根据学生的准考证号查询学生成绩信息 2.学生信息插入功能,在结构体数组的指定位置插入学生信息 3.学生信息删除功能,根据准考证号来删除满足条件的学生 ...

  5. c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc

    C语言课设之学生学籍管理系统.doc 题目学生学籍管理系统 目录一.个人简介.二.报告摘要.三.报告目录.四.报告正文. 1.系统需求分析 2.系统总体设计 3.系统详细设计六.总结. 二.报告摘要 ...

  6. c语言学生成绩设计思路,C语言学生成绩管理系统设计.docx

    沈阳航空航天大学 课程设计报 大作业名称:C语言课程设计 大作业题目:学生成绩管理系统设计 院(系):计算机学院 专业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 完成日期:2016年 ...

  7. c语言学生成绩管理实验报告,学生成绩管理系统c语言实验报告

    #define STU_NUM 10 /*宏定义学生的数量*/ struct student /*定义一个结构体用来存放学生学号.三门课成绩.总分及平均成绩*/ { char stu_id[20]; ...

  8. 【☀️C语言函数传参の结构体数组篇☀️】

    背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...

  9. 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版

    <学生宿舍管理软件C语言源代码完整版>由会员分享,可在线阅读,更多相关<学生宿舍管理软件C语言源代码完整版(8页珍藏版)>请在人人文库网上搜索. 1.源程序代码:#includ ...

最新文章

  1. Python数据分析工具:Pandas_Part 1
  2. 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
  3. 一文带你快速读懂.NET CLI
  4. 用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...
  5. win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...
  6. 卸载IE11并恢复到IE9
  7. 年鉴表格-数据可视化分析
  8. 大容量网盘才是王道?看看坚果云这类的小容量网盘的生存之道
  9. Java不生成 xml注解_java注解生成xml和包含CDATA
  10. java置换_java实现置换密码加密解密
  11. 舞蹈链算法与数独求解
  12. android 好友功能,ListView模拟微信好友功能
  13. foss测试_2016年十大FOSS法律案例
  14. CEPH J版本新特性RGW Multi-tenancy详解
  15. 领悟书生写论坛之类图设计
  16. 鸿蒙系统和海思系统有什么区别,鸿蒙系统和安卓系统 到底有什么区别?
  17. 汇编语言-王爽 第7章 更灵活的定位内存地址的方法-笔记
  18. python 词语频率统计_计算词和词组频率的Python nltk
  19. xpwifi热点设置android,windowsXP设置wifi热点教程
  20. 松勤11期软件测试之Jmeter高级性能测试项目实战学习笔记

热门文章

  1. 人生何求知己,淡谈我的人生囧途(初一)
  2. html实现价格随数量变化,一种商品价格智能分段递减定价方法与流程
  3. Core Dump 程序故障分析
  4. CDSP基于《数据安全法》和《个人信息保护法》的数据安全专家认证
  5. 农村小姑娘的麻辣作文+老师批语
  6. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频
  7. java 爬虫 抓取网上的图片报错521解决方案
  8. Java POI——Excel导入导出的列英文字母与数字的互转方法记录
  9. 程序员的上帝视角(3)-纯粹
  10. 办公室服务器安装系统,教你如何架设办公室FTP服务器以Serv-U为例