C语言能写的学生管理系统是真是假?以前的是假的,现在才是真的
信息管理系统
简介:
该管理系统分为三个权限:学生,老师,管理员
用双向链表实现,文件储存,有账号密码功能。
密码实现MD5加密,较难破解
实现了链表添加,查找,排序,删除等基本操作
管理员能够管理学生和老师的密码和账号,进行一些简单的添加,删除,更改操作。老师具有信息录入 ,查看,修改,查询,删除,排序权限。而学生有信息查看,查询和排序权限。管理员具有信息录入 ,查看,修改,查询,删除,排序和老师学生信息管理权限。对于密码,这里采用及其难以破解的MD5密码加密,根据MD5源码进行改编,最终得到MD5的函数,对录入的密码进行加密操作,然后储存到文件中,这样就保证了即使知道文件并打开文件,也无法破解其密码!
共分为6个文件
5个.cpp文件 1个.h文件
下面上代码 :
mian.cpp:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
#define LEN 100
#define PAGE 3 //分页输出时,每页的学生个数
void admin();
int menu_admin();
void change_change_order_tea();
int menu_change_order_tea();
void change_delete_order_tea();
void teacher();
int menu_tea();
bool judge_tea();
int read_file_order_tea();
void change_change_order_stu();
int menu_change_order_stu();
void change_delete_order_stu();
void student();
int menu_stu();
bool judge_stu();
int read_file_order_stu();
bool judge_admin();
void change_order_admin();
int menu();
int pmenu_search();
int read_file();
void pdisplay();
void pdisplay_sort();
int psearch_mname();
int psearch_schoolnum();
int psearch_phone();
int psearch_sex();
int psearch_age();
int delete_pmenu_search();
int delete_psearch_schoolnum();
int delete_psearch_mname();
int delete_psearch_phone();
int delete_psearch_age();
int delete_psearch_sex();
int change_pmenu_search();
int change_psearch_schoolnum();
int change_psearch_mname();
int change_psearch_phone();
int change_psearch_age();
int change_psearch_sex();
int psort_menu();
void psort_age();
void psort_schoolnum();
void save_order_tea();
void save();
void save_order_stu();
typedef struct {
char mname[9];
char schoolnum[15];
char sex[3];
int age;
char address[20];
char phone[15];
}Node;
typedef struct student
{
Node information;
struct student *next;
struct student *last;
}STUDENT;
typedef struct
{
char username[100];
char password[100];
}Node_order_tea;
typedef struct order_tea
{
Node_order_tea information;
struct order_tea *next;
struct order_tea *last;
}ORDER_TEA;
typedef struct
{
char username[100];
char password[100];
}Node_order_stu;
typedef struct order_stu
{
Node_order_stu information;
struct order_stu *next;
struct order_stu *last;
}ORDER_STU;
int num=0; //文件中总的学生信息个数
STUDENT *head=NULL,*iend,*inew;
FILE *fp; //文件指针
int num_order_tea=0; //文件中总的学生信息个数
ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea;
FILE *fp_order_tea;
int num_order_stu=0; //文件中总的学生信息个数
ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu;
FILE *fp_order_stu;
unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/**********************新加入*****************************/
int main()
{
int chioce;
do
{
printf("\n\t\t********************************\n");
printf("\t\t* 1.老师 *\n");
printf("\t\t* 2.学生 *\n");
printf("\t\t* 3.管理员 *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t*********************************\n");
printf("\t\t请选择登陆身份:");
scanf("%d",&chioce);
switch(chioce)
{
case 1:
teacher();
break;
case 2:
student();
break;
case 3:
admin();
default:
break;
}
}while(chioce!=0);
return 0;
}
自写信息管理系统—— C 实现
2017/01/06 · C/C++ · 2 评论 · C语言, 信息管理
原文出处: chudongfang2015,2016-06-29
信息管理系统
简介:
该管理系统分为三个权限:学生,老师,管理员
用双向链表实现,文件储存,有账号密码功能。
密码实现MD5加密,较难破解
实现了链表添加,查找,排序,删除等基本操作
管理员能够管理学生和老师的密码和账号,进行一些简单的添加,删除,更改操作。老师具有信息录入 ,查看,修改,查询,删除,排序权限。而学生有信息查看,查询和排序权限。管理员具有信息录入 ,查看,修改,查询,删除,排序和老师学生信息管理权限。对于密码,这里采用及其难以破解的MD5密码加密,根据MD5源码进行改编,最终得到MD5的函数,对录入的密码进行加密操作,然后储存到文件中,这样就保证了即使知道文件并打开文件,也无法破解其密码!
共分为6个文件
5个.cpp文件 1个.h文件
下面上代码 :
mian.cpp:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
#define LEN 100
#define PAGE 3 //分页输出时,每页的学生个数
void admin();
int menu_admin();
void change_change_order_tea();
int menu_change_order_tea();
void change_delete_order_tea();
void teacher();
int menu_tea();
bool judge_tea();
int read_file_order_tea();
void change_change_order_stu();
int menu_change_order_stu();
void change_delete_order_stu();
void student();
int menu_stu();
bool judge_stu();
int read_file_order_stu();
bool judge_admin();
void change_order_admin();
int menu();
int pmenu_search();
int read_file();
void pdisplay();
void pdisplay_sort();
int psearch_mname();
int psearch_schoolnum();
int psearch_phone();
int psearch_sex();
int psearch_age();
int delete_pmenu_search();
int delete_psearch_schoolnum();
int delete_psearch_mname();
int delete_psearch_phone();
int delete_psearch_age();
int delete_psearch_sex();
int change_pmenu_search();
int change_psearch_schoolnum();
int change_psearch_mname();
int change_psearch_phone();
int change_psearch_age();
int change_psearch_sex();
int psort_menu();
void psort_age();
void psort_schoolnum();
void save_order_tea();
void save();
void save_order_stu();
typedef struct {
char mname[9];
char schoolnum[15];
char sex[3];
int age;
char address[20];
char phone[15];
}Node;
typedef struct student
{
Node information;
struct student *next;
struct student *last;
}STUDENT;
typedef struct
{
char username[100];
char password[100];
}Node_order_tea;
typedef struct order_tea
{
Node_order_tea information;
struct order_tea *next;
struct order_tea *last;
}ORDER_TEA;
typedef struct
{
char username[100];
char password[100];
}Node_order_stu;
typedef struct order_stu
{
Node_order_stu information;
struct order_stu *next;
struct order_stu *last;
}ORDER_STU;
int num=0; //文件中总的学生信息个数
STUDENT *head=NULL,*iend,*inew;
FILE *fp; //文件指针
int num_order_tea=0; //文件中总的学生信息个数
ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea;
FILE *fp_order_tea;
int num_order_stu=0; //文件中总的学生信息个数
ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu;
FILE *fp_order_stu;
unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/**********************新加入*****************************/
int main()
{
int chioce;
do
{
printf("\n\t\t********************************\n");
printf("\t\t* 1.老师 *\n");
printf("\t\t* 2.学生 *\n");
printf("\t\t* 3.管理员 *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t*********************************\n");
printf("\t\t请选择登陆身份:");
scanf("%d",&chioce);
switch(chioce)
{
case 1:
teacher();
break;
case 2:
student();
break;
case 3:
admin();
default:
break;
}
}while(chioce!=0);
return 0;
}
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
#define LEN 100
#define PAGE 3 //分页输出时,每页的学生个数
void admin();
int menu_admin();
void change_change_order_tea();
int menu_change_order_tea();
void change_delete_order_tea();
void teacher();
int menu_tea();
bool judge_tea();
int read_file_order_tea();
void change_change_order_stu();
int menu_change_order_stu();
void change_delete_order_stu();
void student();
int menu_stu();
bool judge_stu();
int read_file_order_stu();
bool judge_admin();
void change_order_admin();
int menu();
int pmenu_search();
int read_file();
void pdisplay();
void pdisplay_sort();
int psearch_mname();
int psearch_schoolnum();
int psearch_phone();
int psearch_sex();
int psearch_age();
int delete_pmenu_search();
int delete_psearch_schoolnum();
int delete_psearch_mname();
int delete_psearch_phone();
int delete_psearch_age();
int delete_psearch_sex();
int change_pmenu_search();
int change_psearch_schoolnum();
int change_psearch_mname();
int change_psearch_phone();
int change_psearch_age();
int change_psearch_sex();
int psort_menu();
void psort_age();
void psort_schoolnum();
void save_order_tea();
void save();
void save_order_stu();
typedef struct {
char mname[9];
char schoolnum[15];
char sex[3];
int age;
char address[20];
char phone[15];
}Node;
typedef struct student
{
Node information;
struct student *next;
struct student *last;
}STUDENT;
typedef struct
{
char username[100];
char password[100];
}Node_order_tea;
typedef struct order_tea
{
Node_order_tea information;
struct order_tea *next;
struct order_tea *last;
}ORDER_TEA;
typedef struct
{
char username[100];
char password[100];
}Node_order_stu;
typedef struct order_stu
{
Node_order_stu information;
struct order_stu *next;
struct order_stu *last;
}ORDER_STU;
int num=0; //文件中总的学生信息个数
STUDENT *head=NULL,*iend,*inew;
FILE *fp; //文件指针
int num_order_tea=0; //文件中总的学生信息个数
ORDER_TEA *head_order_tea=NULL,*iend_order_tea,*inew_order_tea;
FILE *fp_order_tea;
int num_order_stu=0; //文件中总的学生信息个数
ORDER_STU *head_order_stu=NULL,*iend_order_stu,*inew_order_stu;
FILE *fp_order_stu;
unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/**********************新加入*****************************/
int main()
{
int chioce;
do
{
printf("\n\t\t********************************\n");
printf("\t\t* 1.老师 *\n");
printf("\t\t* 2.学生 *\n");
printf("\t\t* 3.管理员 *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t*********************************\n");
printf("\t\t请选择登陆身份:");
scanf("%d",&chioce);
switch(chioce)
{
case 1:
teacher();
break;
case 2:
student();
break;
case 3:
admin();
default:
break;
}
}while(chioce!=0);
return 0;
}
feature.cpp
#include"head.h"
/********************获取文件名;读取内容;给num,fp,head,flieopenname赋值;创建链表***********************/
//打开文件,并读取文件
int read_file()
{
int i;
int fno,fsize;
if((fp=fopen("student_system.txt","rt"))==NULL)//判断文件是否存在,若存在打开
{ //否则询问是否继续打开
printf("\n库文件不存在!\n");
return 0;
}
rewind(fp); //使文件内部指针移动到文件的开始位置
fno=fileno(fp); //获取文件描述字
fsize=filelength(fno); //计算文件大小,以字节为单位
num=fsize/sizeof(Node); //计算文件包含的学生信息数目
iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请动态空间
fread(inew,sizeof(Node),1,fp); //以Node(结构体)的空间大小读数据
for(i=1;i<=num;i++) //利用for循环创建链表,并把数据储存到其中
{
if(i==1) //第一个节点的创建
{
inew->next=head;
inew->last=NULL; //双向链表
iend=inew;
head=inew;
}
else
{
inew->next=NULL;
inew->last=iend;
iend->next=inew;
iend =inew;
}
inew=(STUDENT *)malloc(sizeof(STUDENT));
fread(inew,sizeof(Node),1,fp);
}
free(inew);//释放最后一个没有储存数据的节点
fclose(fp);//关闭文件
return num;
}
/****************************输入函数*******************/
STUDENT *pinput()
{
char ch;
if(num==0)//判断是否是第一次录入
{
iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请空间
inputone(inew); //录入信息
while(1)
{
num++;
if(num==1) //录入第一个学生信息时,第一个节点的指针指向
{
inew->next=NULL;
inew->last=NULL;
iend =inew;
head =inew;
}
else //在第一个节点的存在下,进行其他节点的录入
{
inew->next=NULL; //新建立节点next指向NULL
inew->last=iend; //新建立节点last指向上一个节点
iend->next=inew; //第一个next->下一个节点
iend =inew; //让iend指向最后一个节点
}
inew=(STUDENT *)malloc(sizeof(STUDENT));
printf("信息输入完毕,是否继续?(是-Y 否-N):");
scanf("\n%c",&ch);
if(ch=='N'||ch=='n') break;//判断是否跳出循环
inputone(inew);
}
free(inew); //释放未存储数据的节点
return head;
}
else//非第一次录入时
{
while(1)//进行循环输入,并进行判断,是否跳出循环
{
inew=(STUDENT *)malloc(sizeof(STUDENT));
getch();
inputone(inew);
num++;
inew->next=NULL; //新建立节点next指向NULL
inew->last=iend; //新建立节点last指向上一个节点
iend->next=inew; //第一个next->下一个节点
iend =inew; //让iend指向最后一个节点
printf("信息输入完毕,是否继续?(是-Y 否-N):");
scanf("\n%c",&ch);
if(ch=='N'||ch=='n')
break;
}
return head;
}
}
void inputone(STUDENT *temp)
{
printf("************************\n");
printf("请输入学生的姓名:");
scanf("%s",inew->information.mname);
printf("请输入学生的学号:");
scanf("%s",inew->information.schoolnum);
printf("请输入学生的性别(男-M 女-F):");
scanf("%s",inew->information.sex);
printf("请输入学生的年龄:");
scanf("%d",&inew->information.age);
printf("请输入学生的家庭住址:");
scanf("%s",inew->information.address);
printf("请输入学生的电话号码:");
scanf("%s",inew->information.phone);
}
/****************************输出函数*******************/
void displayone(STUDENT *temp) //为简化程序- 单个输出函数,用于调用!
{
printf("**********************************\n");
printf("姓名:%s\n",temp->information.mname);
printf("学号:%s\n",temp->information.schoolnum);
printf("性别:%s\n",temp->information.sex);
printf("年龄:%d\n",temp->information.age);
printf("家庭住址:%s\n",temp->information.address);
printf("电话号码:%s\n",temp->information.phone);
printf("===========================\n");
}
/**************************以head为起始输出链表******************************/
void pdisplay()//核心思想:对链表进行操作,然后利用while循环输出
{
STUDENT *temp,*temp1;
int page=1,lastnum=num%PAGE,stu=0,i,page1;
char ch;
int choice;
if(head==NULL)//判断文件中是否有数据
{
printf("文件中没有数据!!\n");
getch();
return;
}
temp=head;
page1=num/PAGE+1;//进行页数的初始化
if(lastnum==0)//判断最后一页的数据数
{
lastnum=PAGE;
page1=page1-1;
}
while(1)//保留最后节点的指针
{
if(temp->next==NULL)
{
temp1=temp;
break;
}
temp=temp->next;
}
temp=head;
rewind(fp);
loop: printf("----------------------------第%d页-----------------------------\n",page);
while(temp!=NULL)//利用while 结构进行输出 知道到最后节点
{
displayone(temp);
temp=temp->next;
stu++;
if(stu==PAGE)//一页输出完后进行选择,对其链表进行操作
{
printf("4---首页 <--上一页--1 3--下一页--> 尾页---6 \n");
scanf("%d",&choice);
switch(choice)
{
case 1://上一页,清屏 ,对其链表进行操作
for(i=1;i<=PAGE+stu;i++)
{
temp=temp->last;
if(temp==head)
{
temp=head;
page=1;
break;
}
}
if(temp!=head)
page--;
stu=0;
system("cls");
goto loop;
break;
case 4://第一页,清屏 ,把head值赋给temp
system("cls");
temp=head;
stu=0;
page=1;
goto loop;
break;
case 6://最后一页,清屏 ,对链表进行操作,找到相应链表值赋给temp
system("cls");
temp=temp1;
for(i=1;i<=lastnum-1;i++)
{
temp=temp->last;
if(temp==head)
{
temp=head;
page=1;
break;
}
}
if(temp!=head)
page=page1;
goto loop;
break;
case 3://下一页,清屏 继续输出,
system("cls");
stu=0;
page++;
goto loop;
break;
}
stu=0;
}
}
if(temp==NULL)
{
printf("\n-------------已到尾页,是否返回首页?(是-Y 否-N):---------------");
scanf("\n%c",&ch);
if(toupper(ch)=='Y')
{
temp= head;
page=1;
stu=0;
system("cls");
goto loop;
}
}
getch();
}
注:登陆密码为:1234567
关于怎么快速学C/C++编程,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编的C/C++编程学习群:194503814
不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。
点击链接加入群聊【C/C++学习入门】:https://jq.qq.com/?_wv=1027&k=5ZynWCN