赞
踩
C语言学生信息管理系统包括以下功能:
1、学生信息的整体注册
2、学生信息的修改
3、学生成绩信息的录入
4、学生信息的添加
5、恢复误删的学生信息
6、学生信息的删除
7、密码修改保存函数
8、学生信息的查询
9、密码修改函数
10、学生信息管理系统的菜单函数
#include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STUDENT 30 //最大学生数 //函数声明,本程序共10个子函数,每个函数对应一个操作 void student_scanf(int n); void student_printf(int n); int student_find_name(int n); int student_find_num(int n); void student_sort_num(int n); void student_sort_sum(int n); int student_alter_num(int n); int student_alter_name(int n); int student_delete_num(int n); int student_delete_name(int n); //全局数组变量,用于存储学生信息 char names[MAX_STUDENT][50]; int math[MAX_STUDENT]; int english[MAX_STUDENT]; int computer[MAX_STUDENT]; int sum[MAX_STUDENT]; int num[MAX_STUDENT]; //以下变量用于学生信息数组排序,作为临时数组 int temp_num[MAX_STUDENT]; char temp_names[MAX_STUDENT][50]; int temp_math[MAX_STUDENT]; int temp_english[MAX_STUDENT]; int temp_computer[MAX_STUDENT]; int temp_sum[MAX_STUDENT]; //sort数组存储排好序的学号或姓名下标 int sort[MAX_STUDENT]; //循环全局变量 int i, j; //main主函数 int main(void) { int choice,n; while (1) { 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("[8] 按姓名修改某个学生信息\n"); printf("[9] 按学号删除某个学生信息\n"); printf("[10] 按姓名删除某个学生信息\n"); printf("[0] 退出程序\n"); printf("请输入您的选择(0 - 9):"); scanf("%d",&choice); printf("**************************************)\n"); switch (choice) { case 1://录入; printf("请输入录入的学生信息数: "); scanf("%d",&n); student_scanf(n); break; case 2://输出; student_printf(n); break; case 3://根据学号查找 student_find_num(n); break; case 4://根据姓名查找 student_find_name(n); break; case 5://按学号排序 student_sort_num(n); break; case 6://按姓名排序 student_sort_sum(n); break; case 7://按学号修改 student_alter_num(n); break; case 8://按姓名修改 student_alter_name(n); break; case 9://按学号删除 student_delete_num(n); n--; break; case 10://按姓名删除 student_delete_name(n); n--; break; case 0://退出程序 printf("退出程序\n"); printf("程序结束,谢谢使用!\n"); exit(0); default: printf("您输入的菜单有误。请重新输入!\n"); } } return 0; } //1.输入信息 void student_scanf(int n) { for (i = 0; i<n; ++i) { printf("\n请输入第%d个学生的信息:\n", i + 1); printf("\n学号:"); scanf("%d", &num[i]); printf("\n姓名:"); scanf("%s", names[i]); printf("\n数学成绩:"); scanf("%d", &math[i]); printf("\n英语成绩:"); scanf("%d", &english[i]); printf("\n计算机成绩:"); scanf("%d", &computer[i]); //计算总成绩 sum[i] = math[i] + english[i] + computer[i]; } } //2.打印信息 void student_printf(int n) { printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n"); printf("----------------------------------------------------------\n"); for (i = 0; i<n; ++i) { printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", num[i], names[i], math[i], english[i], computer[i], sum[i]); } printf("-------------------------------------------------------\n"); } //3.按学号查找 int student_find_num(int n) { int nums; int result; printf("请输入待查找的学生学号:"); scanf("%d",&nums); result= -1; for (i = 0; i<n; ++i) { if (nums == num[i]) { result = i; break; } } //最后判断q值 if (result == -1) { printf("没有该学生信息!\n"); return 0; } else { //先打印表头 printf("\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n"); //再打印数据 printf("%d\t\t%s\t\t%d\t\t%d\t\t%d\t%d\n", num[result], names[result], math[result], english[result], computer[result], sum[result]); printf("打印出查找结果!\n"); } return 1; } //4.用姓名查找成绩 int student_find_name(int n) { char name[200]; int result; printf("请输入待查找的学生姓名:"); scanf("%s", name); result = -1; for (i = 0; i<n; ++i) { if (strcmp(name, names[i]) == 0) { result = i; break; } } if (result == -1) {//未找到结果 printf("没有该学生信息!\n"); return 0; } else//找到结果 { printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n"); printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", num[result], names[result], math[result], english[result], computer[result], sum[result]); printf("已完成查找!\n"); } return 1; } //5.按学号排序 void student_sort_num(int n) { int min,max; for(i=0; i<n; ++i) //复制临时数组 { temp_num[i] = num[i]; } max = 0; //查找学号最大值,将其下标存至sort数组的最后一个值中 for(j=1; j<n; j++) { if(temp_num[max]<temp_num[j]) max = j; } sort[n-1] = max; //sort数组的最后一个数 for(i=0; i<n-1; ++i) { min = i; //查找学号最小值 for(j=0; j<n; ++j) { if(temp_num[min]>temp_num[j]) min = j; } //sort数组记录排序的学生信息的下标 sort[i] = min; temp_num[min] = temp_num[max]; //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰 } for(i=0; i<n; ++i) //再复制一次临时数组 { temp_num[i] = num[i]; strcpy(temp_names[i],names[i]); temp_math[i] = math[i]; temp_english[i] = english[i]; temp_computer[i] = computer[i]; temp_sum[i] = sum[i]; } for(i=0; i<n; i++) //按照下标对原数组进行修改 { num[i] = temp_num[sort[i]]; strcpy(names[i],temp_names[sort[i]]); math[i] = temp_math[sort[i]]; english[i] = temp_english[sort[i]]; computer[i] = temp_computer[sort[i]]; sum[i] = temp_sum[sort[i]]; } printf("排序完毕,请按菜单键2查看排序结果!\n"); return ; } //6.按总成绩排序 void student_sort_sum(int n) { int min,max; for(i=0; i<n; ++i) //复制临时数组 { temp_sum[i] = sum[i]; } max = 0; //查找总成绩最大值,将其下标存至sort数组的最后一个值中 for(j=1; j<n; j++) { if(temp_sum[max]<temp_sum[j]) max = j; } sort[n-1] = max; //sort数组的最后一个数 for(i=0; i<n-1; ++i) { min = i; //查找总成绩最小值 for(j=0; j<n; ++j) { if(temp_sum[min]>temp_sum[j]) min = j; } //sort数组记录排序的学生信息的下标 sort[i] = min; temp_sum[min] = temp_sum[max]; //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰 } for(i=0; i<n; ++i) //再复制一次临时数组 { temp_num[i] = num[i]; strcpy(temp_names[i],names[i]); temp_math[i] = math[i]; temp_english[i] = english[i]; temp_computer[i] = computer[i]; temp_sum[i] = sum[i]; } for(i=0; i<n; i++) //按照下标对原数组进行修改 { num[i] = temp_num[sort[i]]; strcpy(names[i],temp_names[sort[i]]); math[i] = temp_math[sort[i]]; english[i] = temp_english[sort[i]]; computer[i] = temp_computer[sort[i]]; sum[i] = temp_sum[sort[i]]; } printf("排序完毕,请按菜单键2查看排序结果!\n"); return ; } //7.按学号修改学生信息 int student_alter_num(int n) { int nums; int result; printf("请输入待修改的学生学号:"); scanf("%d",&nums); result= -1; for (i = 0; i<n; ++i) { if (nums == num[i]) { result = i; break; } } //最后判断q值 if (result == -1) { printf("没有该学生信息!\n"); return 0; } else //修改信息值 { printf("请重新输入该学生信息:\n"); printf("学号:\n"); scanf("%d",&num[result]); printf("姓名:\n"); scanf("%s",names[result]); printf("数学成绩:\n"); scanf("%d",&math[result]); printf("英语成绩:\n"); scanf("%d",&english[result]); printf("计算机成绩:\n"); scanf("%d",&computer[result]); sum[result] = math[result] + english[result] + computer[result]; } return 1; } //8.按姓名修改学生信息 int student_alter_name(int n) { char name[50]; int result; printf("请输入待修改的学生姓名:"); scanf("%s",name); result= -1; for (i = 0; i<n; ++i) { if (strcmp(name,names[i])==0) { result = i; break; } } //最后判断q值 if (result == -1) { printf("没有该学生信息!\n"); return 0; } else //修改信息值 { printf("请重新输入该学生信息:\n"); printf("学号:\n"); scanf("%d",&num[result]); printf("姓名:\n"); scanf("%s",names[result]); printf("数学成绩:\n"); scanf("%d",&math[result]); printf("英语成绩:\n"); scanf("%d",&english[result]); printf("计算机成绩:\n"); scanf("%d",&computer[result]); sum[result] = math[result] + english[result] + computer[result]; } return 1; } //9.按学号删除学生信息 int student_delete_num(int n) { int nums; int result; printf("请输入待删除的学生学号:"); scanf("%d",&nums); result= -1; for (i = 0; i<n; ++i) { if (nums == num[i]) { result = i; break; } } //最后判断q值 if (result == -1) { printf("没有该学生信息!\n"); return 0; } else //删除当前学生信息即为将数组从result的位置依次前挪一个位置 { for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1 { num[i] = num[i+1]; strcpy(names[i],names[i+1]); math[i] = math[i+1]; english[i] = english[i+1]; computer[i] = computer[i+1]; sum[i] = sum[i+1]; } } return 1; } //10.按姓名删除学生信息 int student_delete_name(int n) { char name[50]; int result; printf("请输入待删除的学生姓名:"); scanf("%s",name); result= -1; for (i = 0; i<n; ++i) { if (strcmp(name,names[i])==0) { result = i; break; } } //最后判断q值 if (result == -1) { printf("没有该学生信息!\n"); return 0; } else //删除当前学生信息即为将数组从result的位置依次前挪一个位置 { for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1 { num[i] = num[i+1]; strcpy(names[i],names[i+1]); math[i] = math[i+1]; english[i] = english[i+1]; computer[i] = computer[i+1]; sum[i] = sum[i+1]; } } return 1; }
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<dos.h> #include<string.h> #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n" #define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum /** * 结 构 体 */ struct student/*定义学生成绩结构体*/ { int num; /*学号*/ char name[15]; /*姓名*/ double elec; /*选修课*/ double expe; /*实验课*/ double requ; /*必修课*/ double sum; /*总分*/ }; /** * 函数声明 */ struct student stu[50]; /*定义结构体数组*/ void in(); /*录入学生成绩信息*/ void show(); /*显示学生信息*/ void order(); /*按总分排序*/ void del(); /*删除学生成绩信息*/ void modify(); /*修改学生成绩信息*/ void menu(); /*主菜单*/ void insert(); /*插入学生信息*/ void total(); /*计算总人数*/ void search(); /*查找学生信息*/ void main() /*主函数*/ { system("color f0\n"); //白底黑字 int n; menu(); scanf("%d",&n);/*输入选择功能的编号*/ while(n) { switch(n) { case 1: in();break; case 2: search();break; case 3: del();break; case 4: modify();break; case 5: insert();break; case 6: order();break; case 7: total();break; case 8: show();break; default:break; } getch(); menu();/*执行完功能再次显示菜单界面*/ scanf("%d",&n); } } void in()/*录入学生信息*/ { int i,m=0;/*m是记录的条数*/ char ch[2]; FILE *fp;/*定义文件指针*/ if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/ { printf("文件不存在!\n"); return;//直接返回,不在执行 } while(!feof(fp))//判断是否指向结束符 { if(fread(&stu[m] ,LEN,1,fp)==1) { m++;/*统计当前记录条数*/ } } fclose(fp); if(m==0) { printf("文件中没有记录!\n"); } else { show();/*调用show函数,显示原有信息*/ } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } printf("输入学生信息(y/n):"); scanf("%s",ch); while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/ { printf("number:"); scanf("%d",&stu[m].num);/*输入学生学号*/ for(i=0;i<m;i++) if(stu[i].num==stu[m].num) { printf("number已经存在了,按任意键继续!"); getch(); fclose(fp); return; } printf("name:"); scanf("%s",stu[m].name);/*输入学生姓名*/ printf("elective:"); scanf("%lf",&stu[m].elec);/*输入选修课成绩*/ printf("experiment:"); scanf("%lf",&stu[m].expe);/*输入实验课成绩*/ printf("required course:"); scanf("%lf",&stu[m].requ);/*输入必修课成绩*/ stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*计算出总成绩*/ if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/ { printf("不能保存!"); getch(); } else { printf("%s 被保存!\n",stu[m].name); m++; } printf("继续?(y/n):");/*询问是否继续*/ scanf("%s",ch); } fclose(fp); printf("OK!\n"); } void show() //增加data.txt文件不存在或者文件内容为空时的显示 { FILE *fp; int i,m=0; fp=fopen("data.txt","rb"); // if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/ // { // printf("文件不存在!\n"); // return; // } // fclose(fp); // if(m==0) // printf("文件中没有记录!\n"); // return; while(!feof(fp)) { if(fread(&stu[m] ,LEN,1,fp)==1) m++; } fclose(fp); printf("number name elective experiment required sum\t\n"); for(i=0;i<m;i++) { printf(FORMAT,DATA);/*将信息按指定格式打印*/ } } void menu()/*自定义函数实现菜单功能*/ { system("cls"); printf("\n\n\n\n"); printf("\t\t|---------------学生信息管理系统---------------|\n"); printf("\t\t|\t\t\t\t\t |\n"); printf("\t\t|\t\t 1. 录入学生信息\t |\n"); printf("\t\t|\t\t 2. 查找学生信息\t |\n"); printf("\t\t|\t\t 3. 删除学生信息\t |\n"); printf("\t\t|\t\t 4. 修改学生信息\t |\n"); printf("\t\t|\t\t 5. 插入学生信息\t |\n"); printf("\t\t|\t\t 6. 排序\t\t |\n"); printf("\t\t|\t\t 7. 统计学生总数\t |\n"); printf("\t\t|\t\t 8. 显示所有学生信息\t |\n"); printf("\t\t|\t\t 0. 退出系统\t\t |\n"); printf("\t\t|\t\t\t\t\t |\n"); printf("\t\t|----------------------------------------------|\n\n"); printf("\t\t\t请选择(0-8):"); } void order()/*自定义排序函数*/ { FILE *fp; struct student t; int i=0,j=0,m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m] ,LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中没有记录!\n"); return; } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } for (i = 0; i < m - 1; i++) for (j = i + 1; j < m; j++)/*双重循环实现成绩比较并交换*/ if (stu[i].sum < stu[j].sum) { t=stu[i];stu[i]=stu[j];stu[j]=t; } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/ if(fwrite(&stu[i] ,LEN,1,fp)!=1) { printf("%s 不能保存文件!\n"); getch(); } fclose(fp); printf("保存成功\n"); } void del()/*自定义删除函数*/ /*逻辑:首先判断data.txt文件是否存在,如果存在,继续操作,判断文件是否为空,不为空,则输入要删除的学生学号;如果文件不存在 返回“文件不存在”,文件内容为空则返回“文件中没有记录” 输入学号----判断是否有这个学号。有:询问是否删除,y删除;n不删除 ,“找到了记录,选择不删除!” 没有:“没有找到这名学生!” */ { FILE *fp; int snum,i,j,m=0; char ch[2]; if((fp=fopen("data.txt","r+"))==NULL) //data.txt文件不存在 { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中没有记录!\n"); //data.txt文件存在,但里面没有内容 return; } printf("请输入学生学号"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num) { printf("找到了这条记录,是否删除?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/ { for(j=i;j<m;j++) stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/ m--;/*记录的总个数减1*/ if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在\n"); return; } for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("can not save!\n"); getch(); } fclose(fp); printf("删除成功!\n"); }else{ printf("找到了记录,选择不删除!"); } break; } else { printf("没有找到这名学生!\n");/*未找到要查找的信息*/ } } void search()/*自定义查找函数*/ //新增:搜索文件中没有的学号时的情况 { FILE *fp; int snum,i,m=0; if((fp=fopen("data.txt","rb"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中没有记录!\n"); return; } printf("请输入number:"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*查找输入的学号是否在记录中*/ { printf("number name elective experiment required sum\t\n"); printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/ break; } if(i==m) printf("没有找到这名学生!\n");/*未找到要查找的信息*/ } void modify()/*自定义修改函数*/ //修正:要修改文件中没有记录的学号时,还是说“找到了。。。” { FILE *fp; struct student t; int i=0,j=0,m=0,snum; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m] ,LEN,1,fp)==1) m++; if(m==0) { printf("文件中没有记录!\n"); fclose(fp); return; } show(); printf("请输入要修改的学生number: "); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/ { printf("找到了这名学生,可以修改他的信息!\n"); printf("name:"); scanf("%s",stu[i].name);/*输入名字*/ printf("elective:"); scanf("%lf",&stu[i].elec);/*输入选修课成绩*/ printf("experiment:"); scanf("%lf",&stu[i].expe);/*输入实验课成绩*/ printf("required course:"); scanf("%lf",&stu[i].requ);/*输入必修课成绩*/ printf("修改成功!"); stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ; if((fp=fopen("data.txt","wb"))==NULL) { printf("can not open\n"); return; } for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("can not save!"); getch(); } fclose(fp); break; } if(i==m) printf("没有找到这名学生!\n");/*未找到要查找的信息*/ } void insert()/*自定义插入函数*/ { FILE *fp; int i,j,k,m=0,snum; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("文件中没有记录!\n"); fclose(fp); return; } printf("请输入要插入的位置(number):\n"); scanf("%d",&snum);/*输入要插入的位置*/ for (i = 0; i < m; i++)//遍历 if (snum == stu[i].num)//判断是否存在 break; for(j=m-1;j>i;j--)//学号下面的内容 stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/ printf("现在请输入要插入的学生信息.\n"); printf("number:"); scanf("%d",&stu[i+1].num); for(k=0;k<m;k++)//判断是否存在 if(stu[k].num==stu[m].num) { printf("number已经存在,按任意键继续!"); getch(); fclose(fp); return; } printf("name:"); scanf("%s",stu[i+1].name); printf("elective:"); scanf("%lf",&stu[i+1].elec); printf("experiment:"); scanf("%lf",&stu[i+1].expe); printf("required course:"); scanf("%lf",&stu[i+1].requ); stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ; printf("插入成功!按任意键返回主界面!"); if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开!\n"); return; } for(k=0;k<=m;k++) if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/ { printf("不能保存!"); getch(); } fclose(fp); } void total() { FILE *fp; int m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; /*统计记录个数即学生个数*/ if(m==0) {printf("no record!\n");fclose(fp);return;} printf("这个班级一共有 %d 名学生!\n",m);/*将统计的个数输出*/ fclose(fp); }
#include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #include "conio.h" #define M 3 struct student { char num[10]; /* 学生的学号 */ char name[20]; /* 学生的姓名 */ char sex[5]; /* 学生的性别 */ int age; /* 学生的年龄 */ char birth[20]; /* 学生的出生年月 */ long tele; /* 学生的电话号码 */ char addr[30]; /* 学生的地址 */ char party[10]; /* 学生是否为党员 */ float score[M]; /* 学生各门学科成绩 */ float total; /* 学生的学科成绩总分 */ struct student *next; }stud[100]; struct secret { char user[30]; char code[30]; }use[100]; int len; //学生人数 / /*学生信息写入到文件中-----系统函数*/ / void writetxt(struct student *head) { struct student *p; p=head; FILE *fp; fp=fopen("d://student.txt","wb"); if(fp==NULL) { printf("cannot open"); return ; } while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); } / /* 学生信息的整体注册*/ / struct student *create( ) { char ch; char ok; int i; struct student *p,*p1,*head,*p2; FILE *fp; fp=fopen("d://student.txt","rb"); if(fp==NULL) { printf("/n 文件还不存在,是否创建?(Y/N)/n"); ch=getchar(); len=1; scanf("%c",&ok); if(ok=='Y'||ok=='y') { p1=p2=(struct student *) malloc(sizeof(struct student)); if((len)<10) printf("请输入0%d的学号:",len); else printf("请输入%d的学号:",len); scanf("%s",p1->num); if((len)<10) printf("请输入0%d的姓名:",len); else printf("请输入%d的姓名:",len); scanf("%s",p1->name); if((len)<10) printf("请输入0%d的性别:",len); else printf("请输入%d的性别:",len); scanf("%s",p1->sex); ch=getchar(); if((len)<10) printf("请输入0%d的年龄:",len); else printf("请输入%d的年龄:",len); scanf("%d",&p1->age); if((len)<10) printf("请输入0%d的生日:",len); else printf("请输入%d的生日:",len); scanf("%s",p1->birth); if((len)<10) printf("请输入0%d的电话:",len); else printf("请输入%d的电话号:",len); scanf("%ld",&p1->tele); if((len)<10) printf("请输入0%d的地址:",len); else printf("请输入%d的地址:",len); scanf("%s",p1->addr); if((len)<10) printf("请输入0%d是否为党员:",len); else printf("请输入%d是否为党员:",len); scanf("%s",p1->party); head=NULL; while(strcmp(p1->num,"0")!=0) { len++; if(head==NULL) head=p1=p2; else p2->next=p1; p2=p1; p1=(struct student *) malloc(sizeof(struct student)); if((len)<10) printf("请输入0%d的学号:",len); else printf("请输入%d的学号:",len); scanf("%s",p1->num); if((len)<10) printf("请输入0%d的姓名:",len); else printf("请输入%d的姓名:",len); scanf("%s",p1->name); if((len)<10) printf("请输入0%d的性别:",len); else printf("请输入%d的性别:",len); scanf("%s",p1->sex); ch=getchar(); if((len)<10) printf("请输入0%d的年龄:",len); else printf("请输入%d的年龄:",len); scanf("%d",&p1->age); if((len)<10) printf("请输入0%d的生日:",len); else printf("请输入%d的生日:",len); scanf("%s",p1->birth); if((len)<10) printf("请输入0%d的电话:",len); else printf("请输入%d的电话号:",len); scanf("%ld",&p1->tele); if((len)<10) printf("请输入0%d的地址:",len); else printf("请输入%d的地址:",len); scanf("%s",p1->addr); if((len)<10) printf("请输入0%d是否为党员:",len); else printf("请输入%d是否为党员:",len); scanf("%s",p1->party); } p2->next=NULL; writetxt(head); return (head); } } if(ok=='N'||ok=='n') { printf("请重新选择/n"); return NULL; } else { printf("/n 文件已经存在/n"); fp=fopen("d://student.txt","rb"); p=stud; for(i=0;!feof(fp);i++) fread(stud+i,sizeof(struct student),1,fp); len=i-1; printf(" 文件里含有%d条学生信息/n",len); printf("/n 是否使用已经存在的学生数据?(Y/N)/n"); ch=getchar(); scanf("%c",&ok); if(ok=='Y'||ok=='y') { head=p1=p2=NULL; fp=fopen("d://student.txt","rb"); if(fp==NULL) { printf("open error/n"); return NULL; } else { printf("学号 姓名 性别 年龄 出生年月 电话号码 地址 是否党员/n"); for(i=0;i<len;i++) { p1=(struct student *)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); if(head==NULL) head=p2=p1; else p2->next=p1; p2=p1; printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); } fclose(fp); return(head); } } if(ok=='N'||ok=='n') { len=1; p1=p2=( struct student *) malloc(sizeof(struct student )); if((len)<10) printf("请输入0%d的学号:",len); else printf("请输入%d的学号:",len); scanf("%s",p1->num); if((len)<10) printf("请输入0%d的姓名:",len); else printf("请输入%d的姓名:",len); scanf("%s",p1->name); if((len)<10) printf("请输入0%d的性别:",len); else printf("请输入%d的性别:",len); scanf("%s",p1->sex); ch=getchar(); if((len)<10) printf("请输入0%d的年龄:",len); else printf("请输入%d的年龄:",len); scanf("%d",&p1->age); if((len)<10) printf("请输入0%d的生日:",len); else printf("请输入%d的生日:",len); scanf("%s",p1->birth); if((len)<10) printf("请输入0%d的电话:",len); else printf("请输入%d的电话号:",len); scanf("%ld",&p1->tele); if((len)<10) printf("请输入0%d的地址:",len); else printf("请输入%d的地址:",len); scanf("%s",p1->addr); if((len)<10) printf("请输入0%d是否为党员:",len); else printf("请输入%d是否为党员:",len); scanf("%s",p1->party); head=NULL; while(strcmp(p1->num,"0")!=0) { if(head==NULL) head=p1=p2; else p2->next=p1; p2=p1; p1=(struct student *) malloc(sizeof(struct student)); if((len)<10) printf("请输入0%d的学号:",len); else printf("请输入%d的学号:",len); scanf("%s",p1->num); if((len)<10) printf("请输入0%d的姓名:",len); else printf("请输入%d的姓名:",len); scanf("%s",p1->name); if((len)<10) printf("请输入0%d的性别:",len); else printf("请输入%d的性别:",len); scanf("%s",p1->sex); ch=getchar(); if((len)<10) printf("请输入0%d的年龄:",len); else printf("请输入%d的年龄:",len); scanf("%d",&p1->age); if((len)<10) printf("请输入0%d的生日:",len); else printf("请输入%d的生日:",len); scanf("%s",p1->birth); if((len)<10) printf("请输入0%d的电话:",len); else printf("请输入%d的电话号:",len); scanf("%ld",&p1->tele); if((len)<10) printf("请输入0%d的地址:",len); else printf("请输入%d的地址:",len); scanf("%s",p1->addr); if((len)<10) printf("请输入0%d是否为党员:",len); else printf("请输入%d是否为党员:",len); scanf("%s",p1->party); } p2->next=NULL; writetxt(head); } return (head); } } /*学生信息的修改*/ struct student *change(struct student *head) { struct student *p=head; int age,choose,m; long tele; char num[10]; char ch,yes,sex[5],birth[20],addr[30],party[10]; char *p1; if(head==NULL) { printf("原链表为空"); return NULL; } else { while(1) { printf("请输入学号/n"); scanf("%s",num); p=head; while(p!=NULL&&strcmp(p->num,num)!=0) { p=p->next; if(p==NULL) { printf("该学生不存在/n"); break; } if(strcmp(p->name,"0")==0) { printf("该学生已不存在/n"); break; } } m=0; while(1) { if(p==NULL) break; if(strcmp(p->name,"0")==0) break; printf("请选择1.性别 2.年龄 3.出生日期4.电话 5.家庭住址6.党员/n"); scanf("%d",&choose); if(choose==1) { printf("请输入新的性别:/n"); scanf("%s",&sex); p1=sex; strcpy(p->sex,p1); printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } if(choose==2) { printf("请输入新的年龄:/n"); scanf("%d",&age); p->age=age; printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } if(choose==3) { printf("请输入新的出生日期:/n"); scanf("%s",birth); p1=birth; strcpy(p->birth,p1); printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } if(choose==4) { printf("请输入新的电话:/n"); scanf("%d",&tele); p->tele=tele; printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } if(choose==5) { printf("请输入新的家庭住址:/n"); scanf("%s",addr); p1=addr; strcpy(p->addr,p1); printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } if(choose==6) { printf("请输入'是'或'否':/n"); scanf("%s",party); p1=party; strcpy(p->party,p1); printf("是否继续修改本学生学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } } printf("是否继续修改其他学生Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; } writetxt(head); p=head; while(p!=NULL) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party); p=p->next; } return head; } } / /*学生成绩信息的录入*/ / struct student *chengji(struct student *head) { FILE *fp; struct student *p1,*p; int i; float sum=0; fp=fopen("d://student1.txt","wb"); p1=(struct student *)malloc(sizeof(struct student)); p1=head; while(p1!=NULL) { if(strcmp(p1->name,"0")==0) { printf("该学生不存在/n"); p1=p1->next; continue; } printf("请输入学号为%s学生的高数、C语言、英语成绩:/n",p1->num); for(i=0;i<M;i++) { scanf("%f",&p1->score[i]); sum+=p1->score[i]; } p1->total=sum; sum=0; fwrite(p1,sizeof(struct student),1,fp); p1=p1->next; } fclose(fp); writetxt(head); p=head; printf("学号 姓名 性别 年龄 出生年月 电话号码 地址 是否党员/n"); while(p!=NULL) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party); p=p->next; } return(head); } / /*学生信息的添加*/ / struct student *insert(struct student *head) { char ch,ok; struct student *p,*p0,*p1; p=p1=head; while(1) { if((len+1)<10) printf("您的学号为0%d/n",len+1); else printf("您的学号为%d/n",len+1); p0=(struct student *)malloc(sizeof(struct student)); len++; if((len)<10) printf("请输入0%d的学号:",len); else printf("请输入%d的学号:",len); scanf("%s",p0->num); if((len)<10) printf("请输入0%d的姓名:",len); else printf("请输入%d的姓名:",len); scanf("%s",p0->name); if((len)<10) printf("请输入0%d的性别:",len); else printf("请输入%d的性别:",len); scanf("%s",p0->sex); ch=getchar(); if((len)<10) printf("请输入0%d的年龄:",len); else printf("请输入%d的年龄:",len); scanf("%d",&p0->age); if((len)<10) printf("请输入0%d的生日:",len); else printf("请输入%d的生日:",len); scanf("%s",p0->birth); if((len)<10) printf("请输入0%d的电话:",len); else printf("请输入%d的电话号:",len); scanf("%ld",&p0->tele); if((len)<10) printf("请输入0%d的地址:",len); else printf("请输入%d的地址:",len); scanf("%s",p0->addr); if((len)<10) printf("请输入0%d是否为党员:",len); else printf("请输入%d是否为党员:",len); scanf("%s",p0->party); while(p->next!=NULL) p=p->next; p->next=p0; p0->next=NULL; printf("是否继续添加Y/N/n") ; ch=getchar(); scanf("%c",&ok); if(ok=='y'||ok=='Y')len++; else { printf("您需要重新进行1的操作来完成该学生信息的注册,谢谢!/n"); break; } } p=head; while(p!=NULL) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party); p=p->next; } writetxt(head); return(head); } / /* 恢复误删的学生信息*/ / struct student *recover(struct student *head) { FILE *fp; struct student *p1,*p; p=p1=(struct student*)malloc(sizeof(struct student)); char ch; char num[10]; p1=head; printf("input the recover number:"); scanf("%s",num); fp=fopen("d://recycle.txt","rb"); if(fp==NULL) { printf("回收站为空!/n"); return NULL; } else { printf("是否将回收站的数据还原?Y/N /n"); ch=getchar(); ch=getchar(); if(ch=='n'||ch=='N') printf("不需要还原!"); else { while(1) { if(strcmp(p1->num,num)==0) break; else p1=p1->next; } while(!feof(fp)) { fread(p,sizeof(struct student),1,fp); if(strcmp(p1->num,p->num)==0) { strcpy(p1->name,p->name); strcpy(p1->sex,p->sex); p1->age=p->age; strcpy(p1->birth,p->birth); p1->tele=p->tele; strcpy(p1->addr,p->addr); strcpy(p1->party,p->party); printf("dddddddddddddddddddd/n"); break; } } } writetxt(head); p=head; while(p!=NULL) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party); p=p->next; }fclose(fp); } return head; } / /* 学生信息的删除*/ / struct student *del(struct student *head) { FILE *fp; struct student *p1,*p2,*p0; p1=p2=head; char ch; char num[10]; printf("input the delete number:"); scanf("%s",num); if(head==NULL) printf("nothing to delete!"); else { while(p1!=NULL) { if(strcmp(p1->num,num)!=0) { p2=p1; p1=p1->next; } if(strcmp(p1->num,num)==0) { p0=p1; printf("是否永久删除该学生的信息?Y/N /n"); ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') { printf("该学生信息已经成功从磁盘删除!/n"); if(p1==head) { p0=p1; head=p1->next; p1=p2=head; p1=p2->next; } else { p0=p1; p2->next=p1->next; p1=p2->next; } break; } else { fp=fopen("d://recycle.txt","ab+"); if(fp==NULL) { printf("cannot open the file!"); return NULL; } fwrite(p0,sizeof(struct student),1,fp); strcpy(p1->name,"0"); strcpy(p1->sex,"0"); p1->age=0; strcpy(p1->birth,"0"); p1->tele=0; strcpy(p1->addr,"0"); strcpy(p1->party,"0"); printf("学生信息已放入回收站!/n"); fclose(fp); printf("如果想恢复刚刚删除的学生信息,请输入'Y'or'y'/n"); printf("如果不想恢复刚刚删除的学生信息,请输入'N'or'n'/n"); ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') { head=recover(head); break; } if(ch=='n'||ch=='N') break ; } } } } writetxt(head); return head; } / /* 密码修改保存函数*/ void write() { FILE *fp; struct secret p; int i; fp=fopen("d://mima.txt","wb"); if(fp==NULL) { printf("cannot open!"); } for(i=0;i<=len;i++) { p=use[i]; fwrite(&p,sizeof(struct secret),1,fp); } fclose(fp); } /*学生信息的查询*/ void research(struct student *head) { struct student *p1,*p2; p1=p2=head; int i,j,l=1,k=0; char sex[20],party[10],ch,yes; int age; char num[10],name[20]; printf("选择:1.模糊查询 2.精确查询:"); scanf("%d",&i); if(i==1) { while(l==1) { printf("选择:1.性别 2.年龄 3.是否党员:"); scanf("%d",&j); if(j==1) { p1=head; printf("输入性别:"); scanf("%s",sex); ch=getchar(); while(p1!=NULL) { if(strcmp(p1->sex,sex)==0) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); p1=p1->next; continue; } k++; if(k==3) printf("该学生不存在!/n"); p1=p1->next; } printf("是否继续查询学生其他信息Y/N/n"); scanf("%c",&yes); printf("yes=%c/n",yes); if(yes=='N'||yes=='n') break; if(yes=='Y'||yes=='y') k=0; } if(j==2) { p1=head; printf("输入年龄:"); scanf("%d",&age); while(p1!=NULL) { if(p1->age==age) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); p1=p1->next; continue; } k++; if(k==3) printf("该学生不存在!/n"); p1=p1->next; } printf("是否继续查询学生其他信息Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; if(yes=='Y'||yes=='y') k=0; } if(j==3) { p1=head; printf("输入是否党员:"); scanf("%s",party); ch=getchar(); while(p1!=NULL) { if(strcmp(p1->party,party)==0) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); p1=p1->next; continue; } k++; if(k==3) printf("该学生不存在!/n"); p1=p1->next; } printf("是否继续查询学生其他信息?Y/N/n"); scanf("%c",&yes); if(yes=='N'||yes=='n') break; if(yes=='Y'||yes=='y') k=0; } } } if(i==2) { printf("请选择细查的关键字:1.学生学号 2.学生姓名:"); scanf("%d",&j); if(j==1) { while(1) { p1=head; printf("输入学生的学号:"); scanf("%5s",num); while(p1!=NULL) { if(strcmp(p1->num,num)==0) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); p1=p1->next;continue; } k++; if(k==3) printf("该学生不存在!/n"); p1=p1->next; } printf("是否继续查询其他学生信息?Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; if(yes=='Y'||yes=='y') k=0; } } if(j==2) { while(1) { p1=head; printf("输入学生的名字:"); scanf("%s",name); while(p1!=NULL) { if(strcmp(p1->name,name)==0) { printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party); p1=p1->next;continue; } k++; if(k==3) printf("该学生不存在!/n"); p1=p1->next; } printf("是否继续查询其他学生信息?Y/N/n"); ch=getchar(); scanf("%c",&yes); if(yes=='N'||yes=='n') break; if(yes=='Y'||yes=='y') k=0; } } } } / void research1(char num[]) { int i; for(i=0;i<=len;i++) if(strcmp(stud[i].num,num)==0) printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",stud[i].num,stud[i].name,stud[i].sex,stud[i].age,stud[i].birth,stud[i].tele,stud[i].addr,stud[i].party); } / /* 密码修改函数-*/ void mimacli() { char use1[30],mima[30],newmima[30],ch; int i,j=0; printf("输入用户名:/n"); scanf("%s",use1); printf("输入密码:/n"); while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; printf("/n"); for(i=0;i<=len;i++) { if(strcmp(stud[i].name,"0")==0) { printf("该学生不存在/n"); continue; } if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0) { printf("输入新密码:/n"); ch=getchar(); j=0; while(1) { newmima[j]=getch(); if(newmima[j]==13) break; putchar('*'); j++; } newmima[j]='/0'; printf("/n"); strcpy(use[i].code,newmima); write(); for(i=0;i<=len;i++){ printf("///n"); printf("%s ",use[0].user); printf("%s/n",use[0].code); printf("///n");} break; } if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0) { printf("**************************************/n"); printf(" 4用户名错误 /n"); printf("***************************************/n"); break; } if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); break; } } } / /* 学生信息管理系统的菜单函数-系统函数*/ int menu() { int sn,i,j=0; char use1[30]; char mima[30]; int m=0; 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(" 8.恢复误删学生信息/n"); printf(" 0.退出学生信息管理系统/n"); printf("==========================================/n"); printf("请选择0-8:/n"); while(1) { scanf("%d",&sn); if(sn==7) for(i=1;i<=len;i++) { strcpy(use[i].user,stud[i-1].num ); strcpy(use[i].code,stud[i-1].num ); } if(sn>1&&sn<7||sn==8) { printf("请输入您的用户名:"); scanf("%s",use1); printf("请输入您的密码:"); while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; printf("/n"); if(sn==6) if(strcmp(use1,use[0].user)!=0) { for(i=0;i<=len;i++) { if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0) { if(i!=0) { printf("**************************************/n"); printf(" 您只能查找您本人的信息 /n"); printf("***************************************/n"); research1(use1); break; } } if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); while(1) { m++; if(m<3) { printf("重新输入:/n"); printf("请输入您的用户名:"); scanf("%s",use1); printf("请输入您的密码:"); j=0; while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); } } else { sn=0; break; } } sn=0; break; } if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0) { printf("**************************************/n"); printf(" 3用户名错误 /n"); printf("***************************************/n"); sn=0; break; } if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); while(1) { m++; if(m<3) { if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0) { printf("**************************************/n"); printf(" 您没有权限来操作 /n"); printf("***************************************/n"); sn=0; break; } printf("重新输入:/n"); printf("请输入您的用户名:"); scanf("%s",use1); printf("请输入您的密码:"); j=0; while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; printf("/n"); if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); } else { printf("**************************************/n"); printf(" 欢迎您登陆本系统 /n"); printf("***************************************/n"); research1(use1); break; } } else { sn=0; break; } } } } } for(i=0;i<=len;i++) { if(sn==6) if(strcmp(use1,use[0].user)!=0) { sn=0; break; } if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0) { if(i!=0) { printf("**************************************/n"); printf(" 您没有权限来操作 /n"); printf("***************************************/n"); sn=0; break; } else { printf("**************************************/n"); printf(" 欢迎您登陆本系统 /n"); printf("***************************************/n"); break; } } if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); while(1) { m++; if(m<3) { printf("重新输入:/n"); printf("请输入您的用户名:"); scanf("%s",use1); printf("请输入您的密码:"); j=0; while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; printf("/n"); if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); } else { printf("**************************************/n"); printf(" 欢迎您登陆本系统 /n"); printf("***************************************/n"); break; } } else { sn=0; break; } } break; } if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0) { printf("**************************************/n"); printf(" 用户名错误 /n"); printf("***************************************/n"); sn=0; break; } if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); while(1) { m++; if(m<3) { if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0) { printf("**************************************/n"); printf(" 您没有权限来操作 /n"); printf("***************************************/n"); sn=0; break; } printf("重新输入:/n"); printf("请输入您的用户名:"); scanf("%s",use1); printf("请输入您的密码:"); j=0; while(1) { mima[j]=getch(); if(mima[j]==13) break; putchar('*'); j++; } mima[j]='/0'; printf("/n"); if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0) { printf("**************************************/n"); printf(" 密码错误 /n"); printf("***************************************/n"); } } else { sn=0; break; } } } } } if (sn<0 || sn>8) { printf("/n/t输入错误,重选0-8/n"); break; } else break; } return sn; } / /* 学生信息管理系统的主函数--系统函数*/ / void main() { struct student *head; int i,j=0; while(1) { switch(menu()) { case 1: printf("**************************************/n"); printf(" 学生信息的整体注册 /n"); printf("***************************************/n"); head=create(); FILE *fp; struct secret p; fp=fopen("d://mima.txt","rb"); if(fp==NULL) printf("open error/n"); else { for(i=0;i<=len;i++) { fread(&p,sizeof(struct secret),1,fp); strcpy(use[i].user,p.user); strcpy(use[i].code,p.code); } fclose(fp); } break; case 2: printf("**************************************/n"); printf("学生信息的修改/n"); printf("**************************************/n"); change(head); break; case 3: printf("**************************************/n"); printf("学生信息的添加/n"); printf("**************************************/n"); head=insert(head); break; case 4: printf("**************************************/n"); printf("学生成绩信息的删除入/n"); printf("**************************************/n"); head=del(head); break; case 5: printf("**************************************/n"); printf("学生成绩信息的录入/n"); printf("**************************************/n"); head=chengji(head); break; case 6: printf("**************************************/n"); printf("学生信息的查询/n"); printf("**************************************/n"); research(head); break; case 7: printf("**************************************/n"); printf("访问者密码的修改/n"); printf("**************************************/n"); mimacli(); break; case 8: printf("**************************************/n"); printf("恢复误删信息/n"); printf("**************************************/n"); recover(head); break; case 0: printf("**************************************/n"); printf("退出学生信息管理系统/n"); printf("**************************************/n"); printf("The end./n"); return; default: printf("/n选择错误,请重选!/n"); getchar(); getchar(); } system("cls"); } }
#include "stdio.h" #include "stdlib.h" typedef struct student { int id; //学号 char name[20]; //姓名 char sex; //性别(f或m) int age; //年龄 int score; //成绩 struct student *next; }student; student *head=NULL; int length; //链表的长度 void create() { student *p1,*p2; length=0; p1=(student *)malloc(sizeof(student)); p1->id=-1; if(head==NULL) head=p1; printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n"); while(1) //学号为0的时候退出 { p2=(student *)malloc(sizeof(student)); scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息 if(p2->id==0) { printf("链表创建完成!\n"); break; } length++; //链表的长度 p1->next=p2; p2->next=NULL; p1=p1->next; } return ; } void display() { student *p=head->next; printf("链表中所有的学生信息如下:\n"); while(p!=NULL) { printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score); p=p->next; } return ; } void search() { int num; student *p=head->next; printf("需要查找的学生学号为:"); scanf("%d",&num); while(p!=NULL) { if(p->id==num) { printf("学号为%d的学生的信息如下:\n",num); printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score); return; } p=p->next; } if(p==NULL) printf("无此记录!\n"); return ; } void insert() { int num,i; student *p,*q; p=head; printf("请输入你要插入位置: "); scanf("%d",&num); if(num>length) { printf("找不到要插入的位置\n"); return ; } else { printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n"); q=(student *)malloc(sizeof(student)); scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score); while(p!=NULL) { if(p->id==q->id) { printf("该学号已经存在,无法插入!\n"); return ; } p=p->next; } p=head; for(i=0;i<num;i++) p=p->next; q->next=p->next; p->next=q; length++; printf("插入成功!\n"); return ; } } void Delete() { int num; student *p,*q; q=head,p=head->next; printf("请输入要删除的学生的学号:\n"); scanf("%d",&num); while(p!=NULL) { if(p->id==num) { q->next=p->next; free(p); length--; printf("删除成功!\n"); return ; } p=p->next; q=q->next; } if(p==NULL) { printf("找不到要删除的编号!\n"); return ; } } void menu() { printf("________________________________________________________________\n"); printf("| 学生信息管理系统 |\n"); printf("| 0、 退出系统 |\n"); printf("| 1、 建立链表 |\n"); printf("| 2、 显示链表 |\n"); printf("| 3、 查找链表中的某个元素 |\n"); printf("| 4、 删除链表中指定学号的结点 |\n"); printf("| 5、 指定的位置上插入一个新结点 |\n"); printf("________________________________________________________________\n"); return ; } int main(void) { int a; menu(); while(1) { printf("请选择相应的功能:"); scanf("%d",&a); switch(a) { case 0: return 0; case 1: create(); menu(); break; case 2: if(head) { display(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 3: if(head) { search(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 4: if(head) { Delete(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 5: if(head) { insert(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; default: break; } } system("pause"); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。