基于Linux系统的学生信息管理系统(共13页).doc
精选优质文档-倾情为你奉上程序设计报告基于Linux系统的学生信息管理系统功能:在Linux系统下,实现学生信息的管理功能开发环境:Linux Ubuntu 12.04,Intel 64位处理器开发语言:C语言运行环境:普通PC机编译环境:gcc Makefile本系统对学生信息进行管理,分有学生、老师、老板三种板块,不同权限的用户登录会进入不同的界面进行操作。系统主界面分为注册,登录,忘记密码,关于以及退出,如果没有这个系统的账号和密码可以进行注册,注册时候会问你要注册的权限是什么,并且根据你注册的权限进去相应的界面。登录时候需要输入账号以及密码,如果账号密码均正确将进入账号所属权限的界面;如果有错误,会根据错误类型提醒用户。忘记密码可通过管理员用户查看进行找回。关于则是一点具体信息。退出则会退出此程序。以下具体介绍每个权限中的具体功能:1. 学生界面:学生的功能包括查看学生信息,考试,提交试卷,修改密码,返回以及退出的功能。将各个函数封装成一个box,然后在主函数中进行调用,具体代码如下:box中的各函数:#include "stu_box.h"#include <stdio.h>#include <stdlib.h>#include <string.h>static void init_node(struct stu_info *head, struct stu_info info)strcpy(head->name, info.name);strcpy(head->sex, info.sex);head->age = info.age;strcpy(head->cid, info.cid);strcpy(head->tel, info.tel);strcpy(head->addr, info.addr);strcpy(head->object, info.object);head->next = head;head->prev = head;static void _add(struct stu_info *a, struct stu_info *new, struct stu_info *b)a->next = new;new->next = b;b->prev = new;new->prev = a;static int add(struct stu_info *head, struct stu_info info)struct stu_info *new = NULL;new = (struct stu_info *)malloc(sizeof(struct stu_info);init_node(new, info);_add(head, new, head->next);return 1;static int read_from_stdin(struct stu_box *box)struct stu_info *head = box->head;struct stu_info info;printf("tttttt请输入学生信息:n");printf("tttttt例如:张山 男 23 上海市 嵌入式ntttttt");scanf("%s %s %d %s %s %s %s", info.name, info.sex, &info.age, info.cid, info.tel, info.addr, info.object);add(head, info);return 1;static int read_from_file(struct stu_box *box)struct stu_info *head = box->head;struct stu_info info;/1.fopenFILE *fp = NULL;fp = fopen("dat/stu_info.dat", "r+");if(fp = NULL)perror("fopen");return -1;while( (fscanf(fp, "%s %s %d %s %s %s %s", info.name, info.sex, &info.age, info.cid, info.tel, info.addr, info.object) != EOF)add(head, info);fclose(fp);return 0;static int edit(struct stu_box *box)return 1;static int display(struct stu_box *box)struct stu_info *tmp = box->head;for(tmp = box->head->next; tmp != box->head; tmp= tmp->next)printf("tttt%st%st%dt%st%st %st%sn", tmp->name, tmp->sex, tmp->age, tmp->cid, tmp->tel, tmp->addr, tmp->object);return 1;static void init_head(struct stu_info *head)struct stu_info info = "abc", "男", 22, "", "", "上海市", "嵌入式"init_node(head, info);static int del(struct stu_box *box)char name32;printf("tttttt请输入需要删除学生的姓名:ntttttt");scanf("%s", name);struct stu_info *tmp = box->head;for(tmp = box->head->next; tmp != box->head; tmp= tmp->next)if(strcmp(tmp->name, name) = 0)tmp->prev->next = tmp->next;tmp->next->prev = tmp->prev;init_head(tmp);free(tmp);break;return 1;static int save(struct stu_box *box)struct stu_info *head = box->head;struct stu_info *tmp = NULL;/1.打开文件FILE *fp = NULL;fp = fopen("dat/stu_info.dat","w+");if(fp = NULL)perror("fopen()");return -1;for(tmp = head->next; tmp != head; tmp = tmp->next)/2.往文件里面写入fprintf(fp, "%s %s %d %s %s %s %sn", tmp->name, tmp->sex, tmp->age, tmp->cid, tmp->tel, tmp->addr, tmp->object);/3.关闭文件fclose(fp);return 0; struct stu_box *init_stu_box()struct stu_box *box = NULL;box = (struct stu_box *)malloc(sizeof(struct stu_box);/创建链表struct stu_info *head = NULL;head = (struct stu_info *)malloc(sizeof(struct stu_info);init_head(head);box->head = head;box->edit = edit;box->del = del;box->display = display;box->save = save;box->readin = read_from_stdin;box->readfp = read_from_file;return box;主函数:#include "user_box.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <time.h>#include "user.h"#include "stu_box.h"static void display_menu()/system("clear");printf("tttttt*n");printf("tttttt* *n");printf("tttttt* 1. 查看学生信息 *n");printf("tttttt* 2. 考试 *n");printf("tttttt* 3. 提交试卷 *n");printf("tttttt* 4. 修改密码 *n");printf("tttttt* 5. 返回 *n");printf("tttttt* 0. 退出 *n");printf("tttttt* *n");printf("tttttt*n");void display_stu_info(struct stu_box *box)box->readfp(box);system("clear");printf("nnnnn");printf("tttt *学生信息* n");printf("nntttt+n");box->display(box);printf("tttt+n");box->save(box);/考试int test()/printf("_%s_n", _func_);char path32;printf("tttttt请输入存放试卷的路径:ntttttt");scanf("%s", path);/getchar();FILE *fp_s = NULL;fp_s = fopen("dat/test.txt", "r+");if(fp_s = NULL)perror("fopen():fp_s");return -1;FILE *fp_d = NULL;fp_d = fopen(path, "w+");if(fp_d = NULL)perror("fopen():fp_d");return -1;char c;while( (c = fgetc(fp_s) != EOF)fputc(c, fp_d);fclose(fp_s);fclose(fp_d);return 0;/提交试卷int upload(struct user *u)char path32;printf("tttttt请输入存放答案的路径:ntttttt");scanf("%s", path);FILE *fp_s = NULL;fp_s = fopen(path, "r+");if(fp_s = NULL)perror("fopen():fp_s");return -1;char str32;sprintf(str, "%s%s%s", "dat/", u->name, "_ret.txt");FILE *fp_d = NULL;fp_d = fopen(str, "w+");if(fp_d = NULL)perror("fopen():fp_d");return -1;char c;while( (c = fgetc(fp_s) != EOF)fputc(c, fp_d);fclose(fp_s);fclose(fp_d);return 0;/修改密码int mod_pd()struct user_info_box * box1= init_user_box();box1->readfp(box1);box1->chmm(box1);box1->save(box1);return 0;int stu_main(struct user *u)/struct user_info_box *box1= init_user_box();struct stu_box *box = init_stu_box();int ret;int y = 0;while(y = 0)system("clear");printf("nnnntttttt 欢迎进入学生界面 nn");time_t t;t = time(NULL);struct tm *tm = localtime(&t);char ts20;sprintf(ts,"%04d-%02d-%02d-%02d:%02d:%02d",tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,tm->tm_hour, tm->tm_min,tm->tm_sec);printf("tttttt欢迎%s登录 %sn", u->name,ts);display_menu();printf("tttttt请选择:");scanf("%d", &ret);getchar();switch(ret)case 1:/查看学生信息box->readfp(box);display_stu_info(box);box->save(box);preAnyone();break;case 2:/考试if(test()=0)printf("tttttt抽取试卷成功!n");preAnyone();elseprintf("tttttt抽取试卷失败!n");preAnyone();break;case 3:/提交试卷upload(u);break;case 4/修改密码mod_pd();preAnyone();break;case 5:y = 6;break;case 0:exit(0);break;default:printf("tttttt您的输入有误!n");preAnyone();break;return 0;2. 老师界面老师的功能包括编辑学生信息,上传试卷,批改试卷,修改密码,返回以及退出的功能。其中编辑学生信息又分为查看学生信息,增加学生信息,修改学生信息以及删除学生信息,具体代码实现如下:#include<time.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include "user.h"#include "stu_box.h"#include "user_box.h"static void display_menu()/system("clear");printf("tttttt*n");printf("tttttt* - *n");printf("tttttt* |1. 编辑学生信息| *n");printf("tttttt* |2. 上传试卷 | *n");printf("tttttt* |3. 批改试卷 | *n");printf("tttttt* |4. 修改密码 | *n");printf("tttttt* |5. 返回 | *n");printf("tttttt* |0. 退出 | *n");printf("tttttt* - *n");printf("tttttt*n");static int display_edit_stu_menu()int y =0;int ret;struct stu_box *box = init_stu_box();box->readfp(box);while(y =0)system("clear");printf("nnnn");printf("tttttt 学生编辑 nn");printf("tttttt*n");printf("tttttt* - *n");printf("tttttt* |1.查看学生信息| *n");printf("tttttt* |2.增加学生信息| *n");printf("tttttt* |3.修改学生信息| *n");printf("tttttt* |4.删除学生信息| *n");printf("tttttt* |5.返回 | *n");printf("tttttt* |0.退出 | *n");printf("tttttt* - *n");printf("tttttt*n");printf("tttttt请输入你的选择:");scanf("%d", &ret);getchar();switch(ret)case 1:box->display(box);preAnyone();break;case 2:box->readin(box);getchar();preAnyone();break;case 3:box->edit(box);getchar();preAnyone();break;case 4:box->del(box);getchar();preAnyone();break;case 5:y = 5;break;case 0:/保存文件box->save(box);exit(0);default:break;/保存文件box->save(box);return 0;void edit_stu_info()display_edit_stu_menu();/考试static int test()char path32;printf("tttttt请输入存放试卷的路径:ntttttt");scanf("%s", path);FILE *fp_s = NULL;fp_s = fopen("dat/test.txt", "r+");if(fp_s = NULL)perror("fopen():fp_s");return -1;FILE *fp_d = NULL;fp_d = fopen(path, "w+");if(fp_d = NULL)perror("fopen():fp_d");return -1;char c;while( (c = fgetc(fp_s) != EOF)fputc(c, fp_d);fclose(fp_s);fclose(fp_d);return 0;/提交试卷static int upload(struct user *u)char path32;printf("tttttt请输入存放答案的路径:ntttttt");scanf("%s", path);FILE *fp_s = NULL;fp_s = fopen(path, "r+");if(fp_s = NULL)perror("fopen():fp_s");return -1;char str32;sprintf(str, "%s%s%s", "dat/", u->name, "_ret.txt");FILE *fp_d = NULL;fp_d = fopen(str, "w+");if(fp_d = NULL)perror("fopen():fp_d");return -1;char c;while( (c = fgetc(fp_s) != EOF)fputc(c, fp_d);fclose(fp_s);fclose(fp_d);return 0;/修改密码static int mod_pd()struct user_info_box * box1 = init_user_box();box1->readfp(box1);box1->chmm(box1);box1->save(box1);return 0;int tea_main(struct user *u)int ret;int y = 0;while(y = 0)system("clear");printf("nnnntttttt 欢迎进入到教师界面 nn");time_t t;t = time(NULL);struct tm *tm = localtime(&t);char ts20;sprintf(ts,"%04d/%02d/%02d-%02d:%02d:%02d",tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,tm->tm_hour, tm->tm_min,tm->tm_sec);printf("tttttt欢迎%s登录 %sn", u->name,ts);display_menu();printf("tttttt请选择:");scanf("%d", &ret);switch(ret)case 1:/编辑看学生信息edit_stu_info();break;case 2:/考试test();break;case 3:/提交试卷upload(u);break;case 4:/修改密码mod_pd();break;case 5:y = 5;break;case 0:exit(0);break;default:break;return 0;专心-专注-专业