大一期末作业终于告一段落
学生管理系统可以用来管理班级学生,能够对学生信息(包括姓名、性别、年龄、成绩等)进行增加、删除、更改、查询等操作。
该软件将学生信息保存在文件中,直接对文件中的数据进行增删改查操作,除了能够培养您的编程思维,还能让你深入了解文件操作。
废话不多说,下面贴代码(在VS2012环境下实测可以运行 在dev环境下测试可以运行)
#define LG (sizeof(struct student)) struct student { char name[10];//保存学生姓名 char sex[5];//保存学生的性别 long int num;//学号 int xuhao;// int age; float score[3]; float averange; char DJ;//存放等级哦 struct student *next; };//定义结构体变量保存 名字 性别 年龄 成绩] 结构体声明 int n;//存放学生人数 int man;//存放统计的男生数 int time=3000;//定义全局变量暂停时间 float JY(float a)//成绩校验函数 { int n=0; while(1) { if(a>100||a<0) { printf(" 输入成绩有误,范围应该0-100,请重新输入:"); scanf("%f",&a); n=n+1; } else { return a; } } } struct student *creat(void)// 链表创建函数 { struct student *head;//头指针 struct student *p1,*p2,*p3;// 其他指针 int mm=0; int m=1; n=0; p1=p2=(struct student *)malloc(LG); // 开辟内存空间 if(p1==NULL) { printf("开辟内存空间失败 "); } //内存空间开辟后最后一定要释放 printf("请先输入学号(输入0退出录入) "); printf(" "); p1->xuhao=m; m++; scanf("%d",&p1->num); if(p1->num!=0) { printf(" 请输入您的姓名 "); printf(" "); scanf("%s",&p1->name); printf(" 你好,%s!",p1->name); printf("请输入您的性别male or female "); //mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型 printf(" "); scanf("%s",&p1->sex); mm=sexJY(p1->sex); if(mm==1) { printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩) "); printf(" 第一科的成绩是:"); scanf("%f",&p1->score[0]); p1->score[0]=JY(p1->score[0]);//校验第一科的成绩 printf(" 第二科的成绩是:"); scanf("%f",&p1->score[1]); p1->score[1]=JY(p1->score[1]);//校验第二科的成绩 printf(" 第三科的成绩是:"); scanf("%f",&p1->score[2]); p1->score[2]=JY(p1->score[2]);//校验第三科的成绩 printf(" 录入完毕 "); _sleep(1000); printf("----------------------------------------------------------------------------------------------------------------- "); } } head=NULL; while(1) { n=n+1; if(n==1) { head=p1; } else { p3=(struct student *)malloc(LG); printf("请先输入学号(输入0退出录入) "); printf(" "); p3->xuhao=m; m++; scanf("%d",&p3->num); if(p3->num!=0) { printf(" 请输入您的姓名 "); printf(" "); scanf("%s",&p3->name); printf(" 你好,%s!",p3->name); printf("请输入您的性别male or female "); printf(" "); scanf("%s",&p3->sex); mm=sexJY(p3->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型 if(mm==1) { printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩) "); printf(" 第一科的成绩是:"); scanf("%f",&p3->score[0]); p3->score[0]=JY(p3->score[0]);//校验第一科的成绩 printf(" 第二科的成绩是:"); scanf("%f",&p3->score[1]); p3->score[1]=JY(p3->score[1]);//校验第二科的成绩 printf(" 第三科的成绩是:"); scanf("%f",&p3->score[2]); p3->score[2]=JY(p3->score[2]);//校验第三科的成绩 printf(" 录入完毕 "); _sleep(1000); printf("----------------------------------------------------------------------------------------------------------------- "); p2->next=p3; p2=p3; printf("%d",n); } } else { n--; break; } } } p2->next=NULL; return (head); }////结构体链表创 void body()//界面设计 { /* char stCmd[128]; sprintf("mode con cols=%d lines=%d", height, width); system(stCmd);动态设置窗体大小 */ system("mode con cols=120 lines=40"); //system("color f4"); printf(" ----------------------------------------------- 学生成绩管理系统----------------------------------------------- "); printf(" "); printf(" "); printf(" =========================== "); printf(" = 请先输入数据 = "); printf(" =========================== "); printf(" 请输入学生的信息,包含姓名、性别、年龄 、语文成绩、数学成绩、外语成绩。 "); printf(" --------------------------------------------------------------------------------------------------------------- "); printf(" "); } void body2()//界面设计 { printf(" ----------------------------------------- 学生成绩管理系统----------------------------------------------- "); printf(" "); printf(" "); printf(" ========================== "); printf(" = 欢迎 = "); printf(" 该系统共有%d个学生 ",n); printf(" =========================== "); } int showdata(struct student *head)//功能界面, { struct student *p; int sexJY(char *sex);//性别校验函数 void *dell(struct student *head);//摧毁函数 struct student *del(struct student *head); struct student *del2(struct student *head);//删除功能2 long int search(struct student *head);//查找功能 int showdata3(struct student *head);//系统设置 void print1(struct student *head);//打印功能1 void print2(struct student *head);//打印功能2 void print3(struct student *head);//打印功能3 void out1(struct student *head);//输出到文件功能 struct student *add(struct student *head);//添加功能 void cont(struct student *head);//计算功能1 void change1(struct student*head);//修改功能 struct student* input1();//外部导入功能 //void input1(struct student *head);//录入功能 //void change1(struct student*head, long int i)//修改功能 struct student *add(struct student *head);//插入数据 struct student*nsert(struct student *head); // void destroy1(struct student *head);//摧毁链表 int TJ(struct student *head);//男生计算功能 int i;//存放学生编号 int iii;//存放选择显示参数 int j;//存放选择参数 int o;//选择颜色参数 long int ii;//存放需要修改的学生编号 long int jj;//存放需要查找的学生编号 char a; p=head; while(1) { body2(); printf(" "); printf(" "); printf(" ---------- 学生成绩管理系统------------ "); printf(" "); printf(" 1 ====================== "); printf(" = 主菜单 = "); printf(" ====================== "); printf(" "); printf(" 请根据需要选择操作 "); printf(" "); printf(" 选择查询的方式 "); printf(" (0) 输入0退出该系统 "); printf(" (1)增加一个同学信息 "); printf(" (2)删除一个同学信息 "); printf(" (3)修改一个学生信息 ");//完成 printf(" (4)计算学生的三科平均分并且给予等级 ");//完成 printf(" (5)显示所有学生的信息 ");//完成 //printf(" (6) 设置系统背景 ");//完成 printf(" (6) 数据存盘 ");//完成 printf(" (7) 查找一个学生的信息 "); printf(" (8) 统计男生的人数 "); printf(" (9) 局部显示学生的信息 "); printf(" (10) 系统设置 "); //printf(" (11) 选择显示时间 "); //printf(" (12) 删除所有学生的数据 "); //printf(" (13) 数据存盘 "); printf(" 请选择1-10 "); scanf("%d",&j);//选择不同的功能 if(j==0) { break; } if(j>=1&&j<=10) { switch(j) { case 1: add(p); _sleep(time); system("cls");//清屏操作 break; case 2: del(p); _sleep(time); system("cls"); break; case 3: print3(p); change1(p); break; // change1(p,ii); system("cls"); break; case 4: cont(p); //rank(stu); _sleep(time); system("cls"); break; case 5: print3(p); _sleep(time); break; case 6: out1(p); _sleep(time); break; /* case 6: printf("请选择颜色 "); printf("(1)天蓝色"); printf("(2)红色"); printf(" (3) 白色 "); printf(" (4) 亮白色 "); printf(" (5)绿色 "); scanf("%d",&o); switch(o) { case 1: system("color 0B"); break; case 2: system("color 0C"); break; case 3: system("color 07"); break; case 4: system("color 0F"); break; case 5: system("color 0A"); break; default://其他值均为默认 system("color 07"); break; } break;*/ case 7: printf("请输入要查找的学生学号"); search(p); _sleep(time); break; case 8: TJ(p);//计算男生人数 _sleep(time); break; case 9: showdata2(p); _sleep(time); // _sleep(5000); break; case 10://系统设置 showdata3(p); _sleep(time); break; /* case 11: printf("输入暂停时间(s),默认3s "); scanf("%d",&time); time=time*1000; _sleep(time); break; */ /*case 12: printf("正在摧毁链表 "); dell(p); time=time*1000; _sleep(time);*/ /*case 13: out1(p); _sleep(time); */ } } else { printf("输入错误 "); _sleep(time); system("cls"); } } } int showdata2(struct student *head) { struct student *p; int sexJY(char *sex);//性别校验函数 struct student *del(struct student *head); struct student *del2(struct student *head);//删除功能2 // long int search(struct student *head,long int i);//查找功能 void print1(struct student *head);//打印功能1 void print2(struct student *head);//打印功能2 void print3(struct student *head);//打印功能3 void cont(struct student *head);//计算功能1 void change1(struct student*head); struct student *add(struct student *head);//插入数据 struct student*nsert(struct student *head); int TJ(struct student *head);//男生计算功能 int iii;//存放学生的查询参数 p=head; system("cls");//清屏 printf(" 1 ====================== "); printf(" = 副菜单 = "); printf(" ====================== "); printf(" 选择查询的方式 "); printf(" 1.显示所有学生的成绩 "); printf(" 2.显示所有学生的学号性别 "); printf(" 3.显示所有学生的所有信息 "); printf(" 请选择1-3 "); scanf("%d",&iii); switch (iii) { case 1: print2(p); _sleep(1000); break; case 2: print1(p); _sleep(1000); break; case 3: print3(p); _sleep(1000); break; default: printf("输入错误,返回主菜单 "); break; } return 0; }//二级菜单 int showdata3(struct student *head)//系统设置选项 { struct student *p; int iii; int o; p=head; system("cls");//清屏 printf(" 1 ====================== "); printf(" = 副菜单 = "); printf(" ====================== "); printf(" 选择查询的方式 "); printf(" (1). 设置系统背景 "); printf(" (2). 修改系统延时 "); printf(" (3). 删除链表所有数据并重新读入 "); printf(" 请选择1-2 "); scanf("%d",&iii); switch (iii) { case 1: printf("请选择颜色 "); printf("(1)天蓝色"); printf("(2)红色"); printf(" (3) 白色 "); printf(" (4) 亮白色 "); printf(" (5)绿色 "); scanf("%d",&o); switch(o) { case 1: system("color 0B"); break; case 2: system("color 0C"); break; case 3: system("color 07"); break; case 4: system("color 0F"); break; case 5: system("color 0A"); break; default://其他值均为默认 system("color 07"); break; } _sleep(1000); break; case 2: printf("输入暂停时间(s),默认3s "); scanf("%d",&time); time=time*1000; _sleep(time); break; case 3: printf("正在摧毁链表 "); dell(p); time=time*1000; _sleep(1000); break; default: printf("输入错误,返回主菜单 "); break; } return 0; } void print1(struct student *head) { struct student *p; p=head; if(head==NULL) { exit(0); } printf("------------------------------------------------------------------------------------------------------------------ "); do { printf(" 姓名:%s,学号%d,%s ",p->name,p->num,p->sex);//姓名,学号 p=p->next; }while(p!=NULL); }//不同显示数据的方式 第一种 void print2(struct student *head)//显示所有学生的成绩 { struct student *p; p=head; if(head==NULL) { exit(0); } printf("------------------------------------------------------------------------------------------------------------------ "); do { printf(" 姓名%s,语文:%3.1f,数学:%3.1f,外语:%3.1f ",p->name,p->score[0],p->score[1],p->score[2]); p=p->next; }while(p!=NULL); }//不同显示数据的方式 第二种 void print3(struct student *head) { float a; struct student *p; p=head; if(head==NULL) { exit(0); } printf("------------------------------------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { printf(" 序号 %d 学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f",p->xuhao,p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2]);//姓名,性别 a=p->score[0]+p->score[1]+p->score[2]; printf(" 总分:%3.1f",a); printf(" 等级%c ",p->DJ); p=p->next; } } int passwd(char *name, char *pwd) { int u = 0; if (strcmp(name, "root") == 0 && strcmp(pwd, "123456") == 0) { u =1; return u; } else if (strcmp(name, "1") == 0 && strcmp(pwd, "1") == 0) { u = 1; return u; } return 0; }//密码校验函数 传递两个字符数组,一个账号,一个密码。 void change1(struct student*head) { long int i; struct student *p; p=head;//定义指针 if(head==NULL) { exit(0); } printf("输入想要修改的学生的学号: "); scanf("%ld",&i); do { //printf("test1"); if(p->num==i)//当结点跳转到该学生时修改成绩 { printf("开始修改信息 "); printf("请先输入学号 "); printf(" "); scanf("%ld",&p->num); if(p->num!=0) { printf(" 请输入您的姓名 "); printf(" "); scanf("%s",&p->name); printf(" 你好,%s!",p->name); printf("请输入您的性别male or female "); printf(" "); scanf("%s",&p->sex); printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩) "); printf(" 第一科的成绩是:"); scanf("%f",&p->score[0]); p->score[0]=JY(p->score[0]);//校验第一科的成绩 printf(" 第二科的成绩是:"); scanf("%f",&p->score[1]); p->score[1]=JY(p->score[1]);//校验第二科的成绩 printf(" 第三科的成绩是:"); scanf("%f",&p->score[2]); p->score[2]=JY(p->score[2]);//校验第三科的成绩 printf(" 录入完毕 "); printf("----------------------------------------------------------------------------------------------------------------- "); break; } p=p->next;//需要把下一个结点赋值给p } } while(p->next!=NULL); } void cont(struct student *head)//计算学生等级函数 { struct student *p; int i=0; p=head; if(head==NULL) { exit(0); } printf("------------------------------------------------------------------------------------------------------------------ "); printf("----------------------------------------计算中---------------------------------------- "); do{ p->averange=((p->score[0])+(p->score[1])+(p->score[2]))/3.0; printf("第%d同学的成绩为%3.1f",i+1,p->averange); if(p->averange>=90&&p->averange<=100) { printf(" 等级为A ",i+1); p->DJ='A'; } if(p->averange>=60&&p->averange<=89) { printf(" 等级为B ",i+1); p->DJ='B'; } if(p->averange>=0&&p->averange<=60) { printf(" 等级为C ",i+1); p->DJ='C'; } if(p->averange>100||p->averange<0) { printf(" incorrect "); } i=i+1; p=p->next; }while(p!=NULL); } long int search(struct student *head)//通过学号来查找学生的信息 { struct student *p; long jj; scanf("%ld",&jj); p=head; if(head==NULL) { exit(0); } do{ if(jj==p->num) { printf(" 学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f 等级%c ",p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->DJ); return 0; } p=p->next; }while(p->next!=NULL); //遍历链表结点 printf("无该生信息 "); return 0; } struct student *del(struct student *head)//链表怎么删除结点并链接 删除序号为多少的学生的成绩 定义一个结构体指针 { int i,j; struct student *p1,*p2;//定义两个结构体指针 if(head==NULL) { exit(0); } p1=head;// p2=head;//p2指针依然指向head printf("删除第几个节点的数据 "); scanf("%d",&i);//获得节点数据 for(j=1;j<i;j++) { p2=p1;//p2指向p1 p1=p1->next;//p1向后移动一个表 } //此时指向删除数据的上一个位置 if(p1==head)//如果此时依然指向链表的头 则链表向后移动一位 { // head=p1->next;//则通过p1向后一移动一位,链表向后移动了一位但是指针没动 head = p1->next;//逻辑完全正确啊 // free(p1); printf("当前正在删除一个结点数据 "); //return head; } else//否则 { p2->next=p1->next;//把p1指针指向下一个数据给p2指针指向下一个位置 这句话的意思是向后移动一位指针。 //把p1指针指向下一个数据给p2指针指向下一个位置 这句话的意思是向后移动一位指针。 } while(head!=NULL) { printf(" 序号 %d 学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f",head->xuhao,head->num,head->name,head->sex,head->score[0],head->score[1],head->score[2]);//姓名,性别 // a=p->score[0]+p->score[1]+p->score[2]; //printf(" 总分:%3.1f",a); printf(" 等级%c ",head->DJ); head=head->next; } //删除第二行数据,之后的链条直接中断需要把链条接上 free(p1);//释放 n=n-1; printf(" **********删除中 稍后********* "); return head;//返回 } struct student*nsert(struct student *head) { struct student *p1,*p,*q; int i = 1; int jj; int mm; int nn; if(head==NULL) { exit(0); } printf("要插入的位置(尾插)1-%d:",n); scanf("%d",&jj);//所要插入第几位学生信息 if(jj>=1&&jj<=n) { p = head->next ; p1 = (struct student *)malloc(sizeof(struct student)); printf("请先输入学号(输入0退出录入) "); printf(" "); scanf("%ld",&p1->num); if(p1->num!=0) { p1->xuhao=jj+1; printf(" 请输入您的姓名 "); printf(" "); scanf("%s",&p1->name); printf(" 你好,%s!",p1->name); printf("请输入您的性别male or female "); printf(" "); scanf("%s",&p1->sex); mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型 if(mm==1) { printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩) "); printf(" 第一科的成绩是:"); scanf("%f",&p1->score[0]); p1->score[0]=JY(p1->score[0]);//校验第一科的成绩 printf(" 第二科的成绩是:"); scanf("%f",&p1->score[1]); p1->score[1]=JY(p1->score[1]);//校验第二科的成绩 printf(" 第三科的成绩是:"); scanf("%f",&p1->score[2]); p1->score[2]=JY(p1->score[2]);//校验第三科的成绩 printf(" 录入完毕 "); n=n+1;//系统学生数自增1 printf("----------------------------------------------------------------------------------------------------------------- "); } } if(1 == jj) { struct student*q = head->next ; head->next = p1; p1 ->next = q; } else while( p ) { if(i == (jj-1)) { struct student*q = p->next ; p->next = p1; p1->next = q; } p = p->next ; i++; } return p; } else { printf(" ---------录入错误--------- "); printf("请重试 "); return head; } } int sexJY2(char *sex) { int u = 0; if (strcmp(sex, "male") == 0) { u =1; return u; } return 0; } int sexJY(char *sex) { int u = 0; while(1) { if (strcmp(sex, "male") == 0 || strcmp(sex, "female") == 0) { u =1; return u; } else { printf("性别错误请重新输入 "); scanf("%s",sex); } } } int TJ(struct student *head) { int sexJY2(char *sex); int mm; int nn; struct student *p; if(head==NULL) { exit(0); } p=head; do { nn=sexJY((char*)p->sex);//强制转换 if(nn==1) { man++; } p=p->next;//一直向下指直到 }while(p!=NULL); printf(" 男生人数为:%d ",man); return 0; }//遍历整个链表 计算男生的人数 int in() { int i,j; int m; int n=0;//如果密码输入错误三次则跳出循环 char user[20]={'0'}; char pas[20]={'0'}; char aa[20]={' ','U','s','e','r',' ','N','a','m','e',':'};//输出账号登陆 char bb[20]={' ','P','a','s','s','w','o','r','d',':'}; system("mode con cols=45 lines=15"); while(1) { printf(" "); for(i=0;i<12;i++) { printf("%c",aa[i]); _sleep(50); } //printf(" User Name:"); gets(user);//输入账号 for(i=0;i<10;i++) { printf("%c",bb[i]); _sleep(50); } gets(pas);//如何隐藏输入的密码 安全性getch(); printf("*"); m=passwd(user,pas); if(m==1) { return m; } else { n++; printf("incorrect please try again "); if(n==3) { system("color 04"); system("cls"); while(1) { printf("快滚出老子的魔仙堡!!!! "); _sleep(1000); } return 0; } } } } struct student *add(struct student *head) { struct student *p,*p1,*p2; int i = 1; int jj; int mm; int nn; p=head; printf("输入要插入的位置1-%d: ",n); scanf("%d",&i); jj=i; p1=(struct student*)malloc(LG);//开辟p1内存空间 p2=(struct student*)malloc(LG);//开辟p2内存空间 printf("请先输入学号(输入0退出录入) "); printf(" "); scanf("%ld",&p1->num); if(p1->num!=0) { p1->xuhao=jj+1; printf(" 请输入您的姓名 "); printf(" "); scanf("%s",&p1->name); printf(" 你好,%s!",p1->name); printf("请输入您的性别male or female "); printf(" "); scanf("%s",&p1->sex); mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型 if(mm==1) { printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩) "); printf(" 第一科的成绩是:"); scanf("%f",&p1->score[0]); p1->score[0]=JY(p1->score[0]);//校验第一科的成绩 printf(" 第二科的成绩是:"); scanf("%f",&p1->score[1]); p1->score[1]=JY(p1->score[1]);//校验第二科的成绩 printf(" 第三科的成绩是:"); scanf("%f",&p1->score[2]); p1->score[2]=JY(p1->score[2]);//校验第三科的成绩 printf(" 录入完毕 "); printf("----------------------------------------------------------------------------------------------------------------- "); } } if(i==1)//如果插入点为头部head 则 { p2=head->next; head->next=p1; p1->next=p2; n=n+1;//系统学生数自增1 return head; } else { p=head; if(i==n) { //如果输入等于n while(p->next!=NULL) { p=p->next; } p->next=p1; p1->next=NULL; //插入函数写完后一定要把指针指向空 //printf("%d",p1->xuhao); n=n+1; return head; } else { //如果不是头也不是尾巴 //则从中间插 while(i--) { p=p->next; } // printf("已找到"); p2=p->next; p->next=p1; p1->next=p2; n=n+1; return head; } } } void *dell(struct student *head) { struct student *p=head; free(p); printf(" 链表已摧毁 "); } int choose(int i) { printf(" ----------------------------------------------- 学生成绩管理系统----------------------------------------------- "); printf(" "); printf(" "); printf(" 请选择信息录入的方式 "); printf(" =========================== "); printf(" = (1)手动输入 = "); printf(" = (2)通过外部导入信息 = "); printf(" =========================== "); printf(" 请选择:"); while(1) { scanf("%d",&i); if(i==1||i==2) { //printf("%d",n); return i; } else { printf(" 请输入一个有效的值:"); } } } void load() { printf(" 该功能还在完善中 敬请期待 "); } //实现输出输入文件的功能 void out1(struct student *head) { FILE *out; struct student *p; char outfile[20]; char ch; int i; ch=getchar(); if((out=fopen("stu.txt","wb"))==NULL) { printf(" 找不到输出文件"); exit(0); } p=head; while(p!=NULL) { if(fwrite(p,LG,1,out)!=1) { printf(" 写入数据出错 "); fclose(out); return; } p=p->next; } fclose(out); } struct student *input1 () { struct student *head = NULL; struct student *p1, *p2;//s = p1;p = p2; FILE *fp; if((fp=fopen("stu.txt","rb+"))==NULL) { printf("打开文件出错 "); exit(0); } while(!feof(fp)) { if((p1=(struct student*)malloc(LG))==NULL){ printf("内存申请出错 "); fclose(fp); exit(0); } if(fread(p1,LG,1,fp)!=1){ free(p1); break; } if(head==NULL) { head=p2=p1; n=n+1; } else{ p2->next=p1; p2=p1; n=n+1; } } fclose(fp); return (head); }
登陆界面
实现文件的读入功能
主菜单的设计 还有相关的二级菜单
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include<windows.h> #include"xyf.h" int main(void) { struct student *p; int m=1;//注意要修改回来 int zz=0; //system("cls"); //m=in(); if(m==1) { system("color 07"); zz=choose(zz); switch (zz) { case 1: body(); //data(p); p=creat(); showdata(p); break; case 2: printf(" -----------------------------------------------正在导入----------------------------------------------- "); p=input1(); showdata(p); break; } } _sleep(1000); return 0; } /*增加一个同学信息 删除一个同学信息 修改一个学生信息 查找一个学生信息(按姓名、按学号) 等级计算 统计男生人数 显示学生信息(局部或全部) 学生成绩管理系统 要求: 定义学生结构体数据类型。在此类型中,应该包括三个成员变量(学号、姓名、成绩)。 定义个学生数组保存学生的信息。用一个变量来记录学生人数。 添加学生的信息。 显示学生的信息。 删除学生的信息。 查找学生的信息,根据姓名。 统计学生的信息。 第一步:菜单界面设计 提示: 1、程序功能的展示:输出语句 2、提供用户选择功能的接口:输入语句 3、对用户输入的范围校验:if结构 4、对用户选择的响应:switch结构 5、单个函数头的定义 第二步: 1、结构体构造(函数外面的地方) 2、设计输入函数,实现一个信息的输入; 3、设计输出函数,实现一个信息的输出。 4、提示:变量的定义位置,解决数据共享问题。 方法一:定义在主函数中,通过函数参数传递的方式进行。 方法二:定义为全局变量,实现数据的共享(变量的作用域) 程序结构: //引入头文件 include //函数原型声明 void add(); //结构体定义(构造) struct A{……}; //主函数定义 int main() { } //子函数定义 void add() {……} 第三步:采用数组解决全班信息的存储、显示问题 1、采用宏定义的方式声明学生人数 2、定义数组,定义数组的数组下标采用宏定义符号 struct stu s[N]; for(int i=0;i<N;i++) { //单个数据输入代码 } 3、对数组操作,显示全班信息 第四步:结构体变量定义在主函数中,通过函数参数传递的方式进行数据共享。 1、一个数据的处理 main() { …… struct stu s; //结构体变量的定义 sr(&s); //实参传递 …… } //单个数据输入函数 void sr(struct stu * x) { //对形参变量x赋值 scanf("%d",&(*x).xh); scanf("%d",&(x->xh)); } 2、多个数据的处理 main() { …… struct stu s[10]; //结构体变量的定义 for(i=0;i<10;i++) sr(&s[i]); //实参传递 …… } //单个数据输入函数 void sr(struct stu * x) { //对形参变量x赋值 scanf("%d",&(*x).xh); scanf("%d",&(x->xh)); } */ /* /*1、声明一个结构体类型student,包含姓名、性别、年龄、语文成绩、数学成绩、外语成绩等成员。 2、编写程序:输入2个同学的基础信息,分别求出2个同学的语文平均成绩。 3、编写程序:输入10个同学的基础信息,显示同学的基础信息。 4、设计多个显示功能函数: (1)显示学生的姓名、性别 (2)显示学生的姓名、年龄 (3)显示学生的姓名、总分 编写程序:让用户有选择的查看10位同学的信息。 5、给结构体类型student新增成员:等级 设计等级测试函数:根据3科平均分计算出学生等级(A:100-90; B:89-60; C:60-0) 编写程序:让用户有选择的使用系统功能。 6、学生管理系统 7.链表+指针 学生成绩管理系统 2016级物联网2班 1.代码优化 3.框架 4.增加功能 5.输出定向文件 */