C语言学生学籍管理系统
电信-HUBIN 人气:0一 .课题设计内容与主要功能
1.1问题描述:
通过该系统实现对学生学籍信息进行录入、显示、修改、插入、删除、排序、保存等操作的管理。
2.1功能要求:
1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、出生日期、入学时间、专业、班级、备注。
2、本系统显示这样的菜单:
请选择系统功能项:
j.学生学籍信息录入
k.学生学籍信息显示
l.学生学籍信息保存
m.学生学籍信息修改
n.学生学籍信息插入
o.学生学籍信息删除
p.学生学籍信息排序
q.学生学籍信息查询
r.退出系统
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将学生学籍信息保存到文件中。
二.代码
#include "stdio.h" #include "string.h" #include "stdlib.h" #define PF printf #define SF scanf #define N 20 FILE *fp; static int n = 0, i, m; struct date { char year[10]; char month[10]; char day[10]; }; struct classmate { char name[20]; char num[20]; char sex[10]; char clas[40]; struct date birth; char time[20]; char specialit[20]; char remark[40]; }stud[N] = {NULL}; void add() { char j; front1: for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; system("cls"); /*清屏*/ PF("\n"); PF("\n请输入要添加的姓名:"); SF("%s",stud[n].name); PF("\n请输入要添加的学号(12位):"); SF("%s",&stud[n].num); PF("\n请输入要添加的性别(男/女):"); SF("\n%s",&stud[n].sex); PF("\n请输入要添加的班级:"); SF("%s",&stud[n].clas); PF("\n请输入要添加的出生年份:"); SF("%s",&stud[n].birth.year); PF("\n请输入要添加的出生月份:"); SF("%s",&stud[n].birth.month); PF("\n请输入要添加的出生日子:"); SF("%s",&stud[n].birth.day); PF("\n请输入要添加的入学日期:"); SF("%s",&stud[n].time); PF("\n请输入要添加的专业:"); SF("%s",&stud[n].specialit); PF("\n请输入要添加的备注:"); SF("%s",stud[n].remark); getchar(); n++; PF("是否继续(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') { n++; goto front1; } /*再输入记录*/ } void del() { int k = 0; char j, s[20]; front2:; for(m = 0;; m++) if(*stud[m].num == '\0') break; n = m; system("cls"); /*清屏*/ PF("请输入要删除的学号:\n"); getchar(); gets(s); for(i = 0; i < n; i++) if(strcmp(s , stud[i].num) == 0) { k=1;break; } /*查找记录*/ if(k == 1) /*删除记录*/ { if(n == 1) { *stud[0].name = '\0'; *stud[0].num = '\0'; *stud[0].sex = '\0'; *stud[0].clas = '\0'; *stud[0].birth.year = '\0'; *stud[0].birth.month = '\0'; *stud[0].birth.day = '\0'; *stud[0].time = '\0'; *stud[0].specialit = '\0'; *stud[0].remark = '\0'; } else { for(k = i;k < n - 1; k++) { stud[k] = stud[k+1]; } *stud[n - 1].name = '\0'; *stud[n - 1].num = '\0'; *stud[n - 1].sex = '\0'; *stud[n - 1].clas = '\0'; *stud[n - 1].birth.year = '\0'; *stud[n - 1].birth.month = '\0'; *stud[n - 1].birth.day = '\0'; *stud[n - 1].time = '\0'; *stud[n - 1].specialit = '\0'; *stud[n - 1].remark = '\0'; } PF("已删除\n\n"); } else { PF("找不到要删除的记录!\n"); PF("按回车键返回:"); getchar(); } PF("是否继续(Y/N)?:"); j = getchar(); getchar(); if(j=='y'||j=='Y') goto front2; } void find() { int i,s = 0; char j,k[20]; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; front3: s=0; system("cls"); /*清屏*/ PF("\n请输入要查询的学号: "); getchar(); gets(k); for(i = 0;i <= n; i++) if(strcmp(k,stud[i].num) == 0) { PF("\t\t姓名:%-10s\n",stud[i].name); PF("\t\t学号:%-10s\n",stud[i].num); PF("\t\t性别:%s\n",stud[i].sex); PF("\t\t班级:%-12s\n",stud[i].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day); PF("\t\t入学日期:%s\n",stud[i].time); PF("\t\t专业:%s\n",stud[i].specialit); PF("\t\t备注:%s\n",stud[i].remark); s=1; } if(s==0) PF("查无此人!\n"); getchar(); PF("是否继续查询(Y/N)?:"); j=getchar();getchar(); if(j=='y'||j=='Y') goto front3; getchar(); } void arrange() { int k,i; struct classmate t; system("cls"); /*清屏*/ FILE *fp; int s; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; for(k = 0;k < n - 1; k++) for(i = 0;i < n - k - 1; i++) if(strcmp(stud[i].num,stud[i+1].num) > 0) { t = stud[i]; stud[i] = stud[i+1]; stud[i+1] = t; } else continue; for(i=0;i<=n-1;i++) if(stud[k].num != 0) { PF("\t\t姓名:%-10s\n",stud[i].name); PF("\t\t学号:%-10s\n",stud[i].num); PF("\t\t性别:%s\n",stud[i].sex); PF("\t\t班级:%-12s\n",stud[i].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day); PF("\t\t入学日期:%s\n",stud[i].time); PF("\t\t专业:%s\n",stud[i].specialit); PF("\t\t备注:%s\n\n",stud[i].remark); } PF("\t\t输入回车返回主菜单"); getchar(); getchar(); } void change() { int k = 0; char j, s[20]; front5: system("cls"); /*清屏*/ for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; PF("\n请输入要修改记录的学号:"); getchar(); gets(s); for(i = 0;i < n; i++) if(strcmp(s , stud[i].num) == 0) { k = 1;break; } /*查找*/ if(k == 1) /*修改*/ { PF("\n"); PF("\n请输入修改后的姓名:"); SF("%s",stud[i].name); PF("\n请输入修改后的学号:"); SF("%s",&stud[i].num); PF("\n请输入修改后的性别:"); SF("\n%s",&stud[i].sex); PF("\n请输入修改后的班级:"); SF("%s",&stud[i].clas); PF("\n请输入修改后的出生年:"); SF("%s",&stud[i].birth.year); PF("\n请输入修改后的出生月:"); SF("%s",&stud[i].birth.month); PF("\n请输入修改后的出生日:"); SF("%s",&stud[i].birth.day); PF("\n请输入修改后的入学日期:"); SF("%s",&stud[n].time); PF("\n请输入修改后的专业:"); SF("%s",&stud[n].specialit); PF("\n请输入修改后的备注:"); SF("%s",stud[i].remark); PF("修改成功\n"); getchar(); } if(k==0) { PF("找不到要修改的记录!\n"); PF("按回车键返回:"); getchar(); } getchar(); PF("是否继续(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') goto front5; } void show() { int s; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; for(s = 0;s < n;s++) { PF("\t\t姓名:%-10s\n",stud[s].name); PF("\t\t学号:%-10s\n",stud[s].num); PF("\t\t性别:%s\n",stud[s].sex); PF("\t\t班级:%-12s\n",stud[s].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[s].birth.year,stud[s].birth.month,stud[s].birth.day); PF("\t\t入学日期:%s\n",stud[s].time); PF("\t\t专业:%s\n",stud[s].specialit); PF("\t\t备注:%s\n\n",stud[s].remark); } PF("\t\t按回车键返回主菜单"); getchar(); getchar(); } void insert() { front9:; char j; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; system("cls"); /*清屏*/ PF("\n"); PF("\n请输入要插入的姓名:"); SF("%s",stud[n].name); PF("\n请输入要插入的学号(12位):"); SF("%s",&stud[n].num); PF("\n请输入要插入的性别(男/女):"); SF("\n%s",&stud[n].sex); PF("\n请输入要插入的班级:"); SF("%s",&stud[n].clas); PF("\n请输入要插入的出生年份:"); SF("%s",&stud[n].birth.year); PF("\n请输入要插入的出生月份:"); SF("%s",&stud[n].birth.month); PF("\n请输入要插入的出生日子:"); SF("%s",&stud[n].birth.day); PF("\n请输入要插入的入学日期:"); SF("%s",&stud[n].time); PF("\n请输入要插入的专业:"); SF("%s",&stud[n].specialit); PF("\n请输入要插入的备注:"); SF("%s",stud[n].remark); getchar(); arrange(); front10:; PF("是否继续(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') { n++; goto front9; } } void main() { char j; PF("\n * * * * * * * * * * * * * * * * * * * * * * * * * * *"); PF("\n * 欢迎使用学生学籍管理系统 *"); PF("\n * 制作人:胡彬 *"); PF("\n * 2020年1月 *"); PF("\n * 按回车键进入主菜单: *"); PF("\n * * * * * * * * * * * * * * * * * * * * * * * * * * *"); if(( fp = fopen("student.txt","r")) == NULL)//载入已保存的学籍信息 { PF("\n 数据加载失败!"); } else { fread(stud, sizeof(struct classmate), N, fp); fclose(fp); PF("\n 数据加载成功"); } getchar(); loop: system("cls"); PF("\n"); PF("\t\t ************\n"); PF("\t\t * 主菜单 *\n"); PF("\t\t ************\n"); PF("\t\t1.学生学籍信息录入\n\n"); PF("\t\t2.学生学籍信息删除\n\n"); PF("\t\t3.学生学籍信息查询\n\n"); PF("\t\t4.学生学籍信息排序\n\n"); PF("\t\t5.学生学籍信息修改\n\n"); PF("\t\t6.学生学籍信息保存\n\n"); PF("\t\t7.退出系统\n\n"); PF("\t\t8.学生学籍信息显示\n\n"); PF("\t\t9.学生学籍信息插入\n\n"); PF("\t\t请选择[1/2/3/4/5/6/7/8]: "); j=getchar(); if(j=='\n') goto loop; /*返回主菜单*/ switch(j) { case '1': add(); goto loop; /*返回主菜单*/ case '2': del(); goto loop; case '3': find(); goto loop; case '4': arrange(); goto loop; case '5': change(); goto loop; case '6': { FILE *fp; fp=fopen("student.txt","w"); fwrite(stud,n*sizeof(struct classmate),1,fp); fclose(fp); goto loop; } case '7': exit(0); case '8': show(); goto loop; case '9': insert();goto loop; default: goto loop; } }
加载全部内容