1、C语言学生信息管理系统项目C语言学生信息管理系统项目学生信息管理系统项目说明文档 一、项目概述 1(1、产品描述 开发意图:为了使档案管理工作更方便,利用计算机提高工作人员的工作效率,减轻工作负担,实现档案管理的无纸化。 应用目标:通过使用本系统软件,帮助最终用户利用计算机,快速方便的对学生学籍管理进行管理、输入、输出、查找、删除的所需操作,使散乱的人事档案能够具体化,直观化、合理化。 作用及范围:本软件适用与教育界。 1(2、产品功能 软件功能表 模块 功能 说明 一般功能 登录 主菜单 退出 学生记录管理 学生信息录入 学生记录的排序 学生记录查询和删除 学生信息打印 统计报表 分数统计报
2、表 文件管理 记录保存功能 记录另保为功能 记录读取功能 1(2、编写环境 Linux操作系统 gcc编译器 EditPlus编辑器 二、功能概述 1(1、功能分块 开始主菜单另添排打保读查统退存加序印存取询计出为是否退出结束 1(2、主菜单 开始输出菜单输入菜单选项Menu显示错误信息0=Menu=100是Count+1提示数据已满输出各项信息返回主菜单输入姓名提示出错A姓名是否符合规范是输入生日提示出错生日格式是否符合规范并且否7=年龄=30是如有多项成绩,同此方法输入成绩提示出错0=成绩100否是提示录入成功,是否要Count=Count+1继续录入(Y/N)A输入XX=YB结束返回主菜
3、单是1(5、排序 开始否是否有记录是输出排序菜提示信息单输入菜单Menu提示出错0=Menu01=N=MaxPag=1Pag+1MaxPag=Max否否是是是否Pag=Pag-1Pag=1Pag=Pag+1Pag=MaxPag=NA否=退出是结束1(7、另存为 开始输入文件名显示出错文件名是否合文件是否存在是否法是否是否覆盖是否保存是是保存文件结束 1(8、保存 开始是否保存到默认文件是保存文件否结束1(9、读取 开始是否有记录未保存提示是否保存到默认文件提示读取默认文件还是自定义文件否输入Y/N从默认文件读输入文件名取是输入正确是否文件名是否正确读取默认文件是否=Y文件是否存在是是保存到默认
4、文件读取自定义文件结束 1(10、查询 开始提示没有记否是否有记录录是输入查询方式,学号or姓名输入姓名,输入学号是按学号查询可模糊打印记录打印记录是否有记录是否有记录是是是否要删除输入学号是是否要删除是学号在搜索列提示不在搜删除记录表中索列表中是提示删除成删除记录功结束1(11、统计 开始输入0=menu=7Menu=13=Menu=5Menu=2Menu=0否否是是是是按总分降序,搜索按第i科分数降序,打印各科平均分返回主界面前三名搜索前三名打印搜索列表1(12、退出 开始是否有文件未是否确认退否保存出(Y/N)是提示是否保否输入I存(Y/N)输入XI=Y | I=N是X=YI = Y是否
5、否X=N保存否退出返回主菜单退出返回主菜单结束另附源代码:#include #include #include #include #include #include #include #define User 10 /用户名最大宽度 #define Password 10 /密码最大宽度 #define Hight 24 /控制台高度 #define Width 80 /控制台宽度 #define DefaultUser admin /默认的用户名 #define DefaultPassword 123456 /默认的用户密码 #define StudentName 20 /学生姓名最大长度
6、#define OnePageNum 8 /一页显示信息条数 #define MARKLEN (Width-2-StudentName-8)/8 /除学号和姓名外其他项目所占长度 #define FILEADDR data.txt /默认文件名 #define FILE_NAME_NUM 8 /文件名长度 int WrongTimes = 3; /允许登录输错密码次数 int IsSaved = 0; /记录是否保存,0为已保存 int student_num = 0; /学生实际人数 int maxnum = 0; /最大学号 int sys_year = 0; /系统时间 年 int sy
7、s_mon = 0; /系统时间 月 int sys_day = 0; /系统时间 日 typedef struct del_node /存放缺漏的学号 int Sno; struct del_node *next; del_Node, *del_list, *del_pointer; typedef struct date_node int Year; /年 int Month; /月 int Day; /日 m_date; typedef struct student_node int Sno; /学号 char Name20; /姓名 m_date birthday; /生日 float
8、 score5; /五门成绩:语文,数学,英语,物理,化学 student_info; typedef struct node /学生信息的数据结构 student_info data; struct node* next; /指向下一结点 Node, *lklist, *pointer; pointer p = NULL,q; /p为尾巴结点,用于添加 q用于其他 lklist head = NULL; /学生数据头结点 del_list del_head = NULL; /缺漏学号链表头结点 del_pointer del_last = NULL;/缺漏学号链表尾结点 /* 功能:添加新的
9、结点到链表中 参数:lklist head,链表头结点 lklist *last,链表尾结点指针 其他,学生结点信息 返回:链表头结点 */ lklist add(lklist head, lklist *last, student_info data) if(head = NULL) /如果链表为空 head = (Node *)malloc(sizeof(Node); *last = head; head-data.Sno = 0; head-next = NULL; q = (Node *)malloc(sizeof(Node); q-data = data; if (q-data.Sn
10、o maxnum) maxnum = q-data.Sno; /记录最大学号 (*last)-next=q; *last=q; (*last)-next = NULL; return head; /* 功能:添加缺漏的学号 参数:lklist head,链表头结点 lklist *last,链表尾结点指针 int sno 学号 返回:链表头结点 */ del_list add_del_sno(del_list head, del_list *last, int sno) del_pointer x; if(head = NULL) /如果链表为空 head = (del_Node *)mall
11、oc(sizeof(del_Node); head-Sno = 0; *last = head; head-next = NULL; x = (del_Node *)malloc(sizeof(del_Node); x-Sno = sno; head-Sno = head-Sno + 1; (*last)-next = x; *last = x; (*last)-next = NULL; return head; /* 功能:清空链表结点 参数:lklist head,链表头结点 lklist *last,链表尾结点指针 返回:无 */ void del(lklist head, lklist
12、 *last) if (head = NULL | head-next = NULL) return; while (head-next) q = head-next; head-next = q-next; free(q); *last = head; /* 功能:清空缺漏学号链表结点 参数:lklist head,链表头结点 lklist *last,链表尾结点指针 返回:无 */ void del_del(del_list head, del_list *last) del_pointer x; if (head = NULL | head-next = NULL) return; wh
13、ile (head-next) x = head-next; head-next = x-next; free(x); *last = head; /* 功能:删除缺漏学号链表第一个结点 参数:lklist head,链表头结点 lklist *last,链表尾结点指针 返回:链表 */ del_list del_del_first(del_list head, del_list *last) if (head = NULL | head-next = NULL) return; del_pointer x = head-next; if (x-next) head-next = x-next
14、; else *last = head; head-next = NULL; free(x); head-Sno = head-Sno-1; return head; /* 功能:复制链表 参数:lklist head,要复制的链表 lklist *copy_head, 存放的头指针 lklist *copy_last, 存放的尾指针 返回:无 */ void copy_link(lklist head, lklist *copy_head, lklist *copy_last) pointer x; if (head = NULL | head-next = NULL) return; x
15、= head; while (x-next) *copy_head = add(*copy_head, copy_last, x-next-data); x = x-next; /* 功能:从输入流读取一个字符 返回:返回该字符的ASCII码 */ int getch(void) struct termios tm,tm_oid; int fd=STDIN_FILENO,c; if(tcgetattr(fd,&tm)0) return -1; tm_oid = tm; cfmakeraw(&tm); if(tcsetattr(fd,TCSANOW,&tm)0) return -1; c = f
16、getc(stdin); if(tcsetattr(fd,TCSANOW,&tm_oid)0) return -1; return c; /* 功能:从输入流读取一个字符 返回:返回该字符的ASCII码 */ int my_getch() int i = 0; int j = 0; do i = getch(); if(i = 27) j = i; continue; else if(i = 91) j = i; continue; else if(i = 65 |i = 66 | i = 67 | i = 68) & j != 0) break; else if(i = 49 | i = 5
17、0 |i = 51 |i = 52 | i = 53 | i = 54) & j != 0) i = i-55; /为了防止和数字键的ASCII码重复,减去55 j = getch(); break; else break; while (1); return i; /* 功能:光标移动 参数:y,第几行;x,第几列 返回:无 */ void set_cursor(int y,int x) char yxstr30; sprintf(yxstr,echo -ne 33%d;%dH,y,x); system(yxstr); /* 功能:输入函数 参数:char str,存放输入的内容; int
18、max,输入的最大个数 int x, int y,输入的坐标 int sign,0为正常输入,1为密码输入,2为数字输入 返回:无 */ void input(char str, int max, int x, int y, int sign) int count=0; /记录当前有效字符个数 int a=0; /获取ascii值 int i=0; set_cursor(x,y); do a = my_getch(); if(a!=13 & a!=127 & count=0 & a=9) strcount = a; printf(%c,a); fflush(stdout); count+; e
19、lse strcount = a; if(sign = 0) printf(%c,a); else printf(*); fflush(stdout); count+; else if(a = 127) count-; if(count=1) strcount = 0; break; while(1); /* 功能:获取系统时间 参数:无 返回:无 */ void get_sys_date() time_t timep; struct tm *p; time(&timep); p = gmtime(&timep); sys_year = 1900+p-tm_year; sys_mon = 1
20、+ p-tm_mon; sys_day = p-tm_mday; /* 功能:打印文字 参数:int x,行 int y,列 char str,文字内容 返回:无 */ void print_words(int x, int y, char str) set_cursor(x,y); printf(%s,str); fflush(stdout); /* 功能:打印边框 参数:int row,边框起始行坐标 int h,边框高度 返回:无 */ void print_border(int row, int h) int i=0; print_words(row, 1, ?); for(i=3;
21、iWidth; i+) printf(=); fflush(stdout); printf(?); fflush(stdout); for(i=1; ih-1; i+) print_words(row+i, 1, ?); print_words(row+i, Width-1, ?); print_words(row+h-1, 1, ?); for(i=3; iWidth-20; i+) printf(=); fflush(stdout); printf(By ZH %04d-%02d-%02d,sys_year, sys_mon, sys_day); fflush(stdout); print
22、f(=?); fflush(stdout); /打印信息框 print_words(row+h-4, (Width-10)/2, MessageBox); set_cursor(row+h-4,3); for(i=2; i(Width-10)/2-1; i+) printf(=); fflush(stdout); set_cursor(row+h-4,(Width-10)/2+10); for(i=0; i(Width-10)/2-1; i+) printf(=); fflush(stdout); /* 功能:打印标题头 参数:char* s_title,标题内容 int row,标题头起始行
23、坐标 返回:无 */ void print_title_head(char* s_title, int row) int len = strlen(s_title) + 2; int col = (Width-len)/2; /计算居中位置 int i=0; set_cursor(row,col+1); for(i=0; ilen; i+) printf(*); fflush(stdout); set_cursor(row+1,col+1); printf(*%s*,s_title); fflush(stdout); set_cursor(row+2,col+1); for(i=0; ilen; i+) printf(*); fflush(stdout); /* 功能:清空 参数:int x,清空的行坐标 int y,清空的列坐标 int n,清空长度 返回:无 *
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1