学生信息管理系统(C语言)
程序员文章站
2022-03-09 19:29:44
...
学生信息管理系统(C实现–文件+链表)
需求分析
其中的”信息管理模块“的登录验证改为用户登录验证了
总体思路
-
使用动态链表组织内存数据,并且关联到文件
-
采用的是全局变量,分别代表管理员和学生,还有密码
-
在开始的时候先从文件读取信息到全局变量头结点
-
- 在结束的时候将头结点信息更新到文件
- 在修改信息后,直接更新文件,而不是退出后更新(防止意外退出而没有更新到文件)
-
文件部分,一个是学生信息的文件,一个是管理员信息的文件。读取的文件的方式使用的操作文本文件的==fscanf()和fprintf()函数==。都是按指定的格式进行读写3.
-
登入模块用户登陆(学生登陆,管理员登陆)
-
界面函数:参考了这位博主(调整光标和隐藏光标),还有一些布局。<https://blog.csdn.net/qq_41226029/article/details/79438131>
代码:
#include<stdio.h>
#include<string.h> //字符串比较函数strcmp(,)如果相同返回0,
#include<windows.h> //system("cls"):清屏 sleep(毫秒):将执行挂起一段时间
#include<conio.h> //getch()
#include<stdlib.h>
typedef struct Stu{
char xueh[12]; //学号
char name[8]; //名字
int age; //7
char sex; //7
char born[12]; //出生年月
char address[8]; //地址
char phone[12]; //电话
char email[14]; //邮箱 80位
struct Stu *next; //采用的是单链表结构存储
}link_stu;
typedef link_stu* link_S;
//管理员数据结构
typedef struct Guan{
char passward[10];
char name[10];
struct Guan *next;
}link_gg;
typedef link_gg* link_G;
typedef struct stupw {
char pw[10];
struct stupw *next;
}link_spw;
typedef link_spw* link_P;
link_P head_pw;
link_G head_tea; //管理员
link_S head; //学生全局变量
int Flag = 1; //用于标记学生登录还是管理员登录--影响到“信息管理”的使用
/**文件函数*/
void init_tea(); //初始化管理员
void flush_tea(); //更新管理员信息到文件
void init_stu(); //初始化学生信息
void flush_stu(); //更新到学生信息到文件
void init_stupw(); //passward
/**界面辅助函数*/
void toxy(int x, int y); //将光标移动到X,Y坐标处
void HideCursor(); //隐藏光标
/**共用界面*/
void show_head(); //学生信息界面
void show_2_menu(); //中间的小窗口
void show_3(); //外面的大窗口
/**学生信息函数*/
void show_Stu(); //学生总览
void find_Stu(); //学生查询
void print_Stu(char arr[8]); //重复姓名
void print_Stu02(link_S stu);
void xueh_find(); //学号查询界面
link_S xueh_find_2(); // 学号查下
void names_find(); //姓名查询
/**信息管理(增删改查)函数*/
void inform_guanli();
void fix_address(link_S p);
void fix_phone(link_S p);
void fix_email(link_S p);
void delete_Stu(link_S pi);
void add_Stu();
int add_check(char xuehao[12]); //用于检测重复学号
/**学生排序函数*/
void sort_Stu();
void sort_age();
void sort_xueh();
void select_Stu();
/**主界面及退出函数*/
void mainmenu();
int exitSys(); //退出
void chose_menu();
void check_inform();
void check_tea();
void print_pw();
void toxy(int x, int y) //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void init_stupw()
{
link_S p = head->next;
char temp[10];
head_pw = (link_P)malloc(sizeof(link_spw));
head_pw->next = NULL;
link_P q,tail;
tail = head_pw;
int i,j;
//将学号后6位变成密码,链表存储
while(p)
{
for(i=4,j=0;i<=9;i++,j++)
temp[j] = p->xueh[i];
q = (link_P)malloc(sizeof(link_spw));
strcpy(q->pw,temp);
tail->next = q;
tail = q;
p = p->next;
}
tail->next = NULL;
}
void print_pw()
{
link_P p = head_pw->next;
while(p)
{
printf("%s\n",p->pw);
p = p->next;
}
}
void flush_tea() /**把链表内容更新到文件*/
{
link_G p = head_tea->next;
FILE *fp = fopen("pw.txt","w");
if(fp == NULL)
{
printf("打开文件失败!");
exit(0);
}
while(p)
{
fprintf(fp,"%s %s\n",p->name,p->passward);
p = p->next;
}
fclose(fp);
}
void init_tea()
{
FILE *fp = fopen("pw.txt","r");
/**先定义这些临时变量,用来存放使用fscanf()函数时的输入
*/
char name[10];
char passward[10];
head_tea = (link_G)malloc(sizeof(link_gg));
head_tea->next = NULL;
link_G tail = head_tea;
if(fp == NULL)
{
printf("打开文件失败!");
exit(0);
}
while((fscanf (fp,"%s %s\n",name,passward)) != EOF )
{
/**fscanf()函数是有返回值的,如果读取到文件尾会返回EOF(-1)
*/
link_G p = (link_G)malloc(sizeof(link_gg));
strcpy((p->name),name);
strcpy((p->passward),passward);
tail->next = p;
tail = p;
}
tail->next = NULL;
fclose(fp);
}
void init_stu() /**初始化学生信息*/
{
FILE *fp = fopen("studata_4.txt","r");
if(fp == NULL)
{
printf("打开文件失败!");
exit(0);
}
/**先定义这些临时变量,用来存放使用fscanf()函数时的输入
*/
char xueh2[12]; //学号
char name2[8];
int age2; //8
char sex2; //8
char born2[12]; //出生年月
char address2[8]; //地址
char phone2[12]; //电话
char email2[14]; //邮箱 =90位
head = (link_S)malloc(sizeof(link_stu));
head->next = NULL;
link_S tail = head;
while((fscanf (fp,"%s %s %d %s %c %s %s %s\n",xueh2,name2,&age2,address2,&sex2,born2,phone2,email2)) != EOF )
{
/**fscanf()函数是有返回值的,如果读取到文件尾会返回EOF(-1)
*/
link_S p = (link_S)malloc(sizeof(link_stu));
strcpy((p->xueh),xueh2); //p->xueh指的是值,而右边是地址,所以加一个&
strcpy((p->name),name2);
p->age = age2;
p->sex = sex2;
strcpy((p->born),born2);
strcpy((p->address),address2);
strcpy((p->phone),phone2);
strcpy((p->email),email2);
tail->next = p;
tail = p;
}
tail->next = NULL;
fclose(fp);
}
void flush_stu() /**更新学生信息到文件*/
{
link_S p = head->next;
FILE *fp = fopen("studata_4.txt","w");
if(fp == NULL)
{
printf("打开文件失败!");
exit(0);
}
while(p)
{
fprintf(fp,"%s %s %d %s %c %s %s %s\n",p->xueh,p->name,p->age,p->address,p->sex,p->born,p->phone,p->email);
p = p->next;
}
fclose(fp);
}
void delete_Stu(link_S pi) /**删除学生*/
{
/**确定有这个学生才到这里*/
link_S p = head->next;
link_S pre = head;
while(p != pi)
{
pre = p;
p = p->next;
}
pre->next = p->next;
free(p);
flush_stu();
show_2_menu();
toxy(38,17);
printf("--删除成功--");
toxy(38,19);
printf("---按0返回--");
Sleep(2000);
}
void show_2_menu() /**小窗口*/
{
int i;
toxy(30,12);
printf("| |");
toxy(30,13);
printf("| |");
toxy(30,14);
printf("| |********************| |");
for(i=15;i<=21;i++)
{
toxy(30,i);
printf("| | | |");
}
toxy(30,22);
printf("| |********************| |");
toxy(30,23);
printf("| |");
toxy(30,24);
printf("| |");
}
void show_head() /**学生信息界面*/
{
int i;
toxy(36,9);
printf("学生信息");
toxy(1,10);
for(i=0;i<80;i++) printf("-");
toxy(1,11);
printf("学号 姓名 年龄 性别 出生年月 地址 电话 邮箱 ");
toxy(1,12);
for(i=0;i<80;i++) printf("-");
toxy(1,13);
}
void check_inform()
{
if(Flag)
inform_guanli();
else
{
show_2_menu();
toxy(38,18);
printf("--禁止访问--");
Sleep(1000);
}
}
void inform_guanli() /**信息管理-功能*/
{
show_2_menu();
toxy(38,16);
printf("1 信息修改");
toxy(38,18);
printf("2 删除学生");
toxy(38,20);
printf("3 添加学生");
toxy(38,24);
printf("----按0返回");
char ch ;
while(ch = getch())
{
if(ch == '1') //修改信息
{
link_S p = xueh_find_2();
if(p != NULL) //找到了学生
{
show_2_menu();
toxy(38,16);
printf("该学生为:");
toxy(38,18);
printf("姓名:%s",p->name);
Sleep(3000);
show_2_menu();
toxy(38,16);
printf("1 修改地址");
toxy(38,18);
printf("2 修改电话");
toxy(38,20);
printf("3 修改邮箱");
toxy(38,24);
printf("----按0返回");
char ch_1 = getch();
switch(ch_1)
{
case '1': fix_address(p); break;
case '2': fix_phone(p); break;
case '3': fix_email(p); break;
case '0': inform_guanli(); break;
default : break;
}
}
else
{
show_2_menu();
toxy(38,17);
printf("--查找失败--");
toxy(38,19);
printf("--无法修改--");
Sleep(2000);
inform_guanli();
}
}
if(ch == '2')
{
link_S p_1 = xueh_find_2();
if(p_1)
{
/**查询成功先返回学生名字,便于确认
*/
show_2_menu();
toxy(35,16);
printf(" 是否删除该学生?");
toxy(35,18);
printf(" 姓名:%s",p_1->name);
toxy(35,20);
printf(" 1 是 0 否 ");
char ch = getch();
switch(ch)
{
case '1': delete_Stu(p_1); break;
case '0': inform_guanli(); break;
default : break;
}
}
else
{
show_2_menu();
toxy(38,17);
printf("--查找失败--");
toxy(38,19);
printf("--无法删除--");
Sleep(3000);
inform_guanli();
}
}
if(ch == '3')
add_Stu();
if(ch == '0')
mainmenu();
}
}
void print_Stu02(link_S stu) /**打印某个学生*/
{
system("cls"); //先清屏
link_S headp = stu;
show_head();
printf("%-12s%-8s%-7d%-7c%-12s%-8s%-12s%-14s",headp->xueh,headp->name,headp->age,headp->sex,headp->born,headp->address,headp->phone,headp->email);
}
void print_Stu(char arr[8]) /**对有重复名的打印*/
{
system("cls"); //先清屏
show_head();
link_S p = head->next;
int x = 13;
while(p)
{
if(strcmp(p->name,arr)==0)
{
toxy(1,x);
printf("%-12s%-8s%-7d%-7c%-12s%-8s%-12s%-14s\n",p->xueh,p->name,p->age,p->sex,p->born,p->address,p->phone,p->email);
x++;
}
p = p->next;
}
}
link_S xueh_find_2() /**查找*/
{
//要先从文件读取
link_S p = head->next;
show_2_menu();
toxy(38,16);
printf(" 输入学号");
toxy(37,20); //这两句在调用的的时候才出现
printf("输入: "); //这里的输入不是1和2,而是输入1,2后出现的学号或姓名
toxy(41,20);
char xuehao[12];
toxy(42,20);
scanf("%s",xuehao);
while(p && strcmp(p->xueh,xuehao)!=0)
p = p->next;
return p;
}
void show_3() /**大窗口*/
{
int i;
toxy(30,9);
printf("|--------------------------|");
toxy(30,10);
printf("| 学生信息管理系统 |");
toxy(30,11);
printf("|--------------------------|");
for(i=12;i<=25;i++)
{
toxy(30,i);
printf("| |");
}
toxy(30,26);
printf("|--------------------------|");
}
void xueh_find() /**学号查询*/
{
link_S p = xueh_find_2(); /**查询函数*/
if(p)
{
show_2_menu();
toxy(38,18);
printf("--查询成功--");
Sleep(1000);
print_Stu02(p); //查询成功-打印学生信息
Sleep(2000);
system("cls");
toxy(45,9);
show_3();
find_Stu();
}
else
{
show_2_menu();
toxy(38,18);
printf("--查询失败--");
Sleep(1500);
show_3();
find_Stu();
}
}
void names_find() /***姓名查询*/
{
link_S p = head->next;
show_2_menu(); //覆盖
char name[8];
char arr[8];
toxy(39,16);
printf(" 输入姓名");
toxy(36,20); //这两句在调用的的时候才出现
printf("输入:"); //这里的输入不是1和2,而是输入1,2后出现的学号或姓名
scanf("%s",name);
while(p && strcmp(p->name,name)!=0)
p = p->next;
if(p)
{
strcpy(arr,p->name);
show_2_menu();
toxy(38,18);
printf("--查询成功--");
Sleep(1000);
print_Stu(arr);
Sleep(2000);
system("cls");
show_3();
find_Stu();
}
else
{
show_2_menu();
toxy(38,18);
printf("--查询失败--");
Sleep(1500);
show_3();
find_Stu();
}
}
void find_Stu() /**寻找学生*/
{
char ch;//用于getch()做选择
show_2_menu();
toxy(38,16);
printf("1 学号查询");
toxy(38,18);
printf("2 姓名查询");
toxy(38,20);
printf("----按0返回");
while(ch=getch())
{
if(ch == '1')
xueh_find();
if(ch == '2')
names_find();
if(ch == '0')
mainmenu();
}
}
void fix_address(link_S p) /**修改地址--8位*/
{
char add_2[8]; //临时变量
int flag = 1;
while(flag)
{
toxy(30,28);
printf("输入修改后的地址:");
scanf("%s",add_2);
if(strlen(add_2)<sizeof(add_2)) //输入的字符串长度小于数组长度
{
strcpy(p->address,add_2); //将数组拷贝到学生信息
toxy(30,28);
printf(" -----修改成功----- ");
Sleep(2000);
toxy(30,28);
printf(" ");
flush_stu();
flag = 0;
}
else
{
toxy(30,28);
printf(" ");
toxy(30,28);
printf("长度越界,重新输入:");
Sleep(1500);
flag = 1;
}
}
}
void fix_phone(link_S p) /**修改手机---12位*/
{
char phone_2[12];
int flag = 1;
while(flag)
{
toxy(30,28);
printf("输入修改后的电话:");
scanf("%s",phone_2);
if(strlen(phone_2)<sizeof(phone_2))
{
strcpy(p->phone,phone_2);
toxy(30,28);
printf(" -----修改成功----- ");
Sleep(2000);
toxy(30,28);
printf(" ");
flush_stu();
flag = 0;
}
else
{
toxy(30,28);
printf(" ");
toxy(30,28);
printf("长度越界,重新输入:");
Sleep(1500);
flag = 1;
}
}
}
void fix_email(link_S p) /**修改邮箱--14位*/
{
char email_2[14];
int flag = 1;
while(flag)
{
toxy(30,28);
printf("输入修改后的邮箱:");
scanf("%s",email_2);
if(strlen(email_2)<sizeof(email_2)) //输入长度合理检测
{
strcpy(p->email,email_2);
toxy(30,28);
printf(" -----修改成功----- ");
Sleep(2000);
toxy(30,28);
printf(" ");
flush_stu();
flag = 0;
}
else
{
toxy(30,28);
printf(" ");
toxy(30,28);
printf("长度越界,重新输入:");
Sleep(1500);
flag = 1;
}
}
}
int add_check(char xuehao[12]) /**用于检测重复学号*/
{
link_S p = head->next;
int flag = 1;
while(p) //重复检测
{
if(strcmp(p->xueh,xuehao) == 0)
flag = 0;
p = p->next;
}
return flag;
}
void add_Stu() /**添加学生-首插*/
{
system("cls");
int flag;
link_S p = (link_S)malloc(sizeof(link_stu));
toxy(30,9);
printf("|--------------------------|");
toxy(30,10);
printf("| 学生信息管理系统 |");
toxy(30,11);
printf("|--------------------------|");
toxy(30,12);
printf("| 学号: |");
toxy(43,12);
scanf("%s",p->xueh);
//学号合理性检查
flag = add_check(p->xueh);
if(flag == 0){
toxy(30,15);
printf("|--------------------------|");
toxy(30,16);
printf("| |");
toxy(30,17);
printf("| 重复学号--录入失败 |");
toxy(30,18);
printf("| |");
toxy(30,19);
printf("| ----按0继续 |");
toxy(30,20);
printf("| |");
toxy(30,21);
printf("|--------------------------|");
char ch ;
while(ch = getch())
{
if(ch == '0')
add_Stu();
}
}
getchar();
toxy(30,13);
printf("| |");
toxy(30,14);
printf("| 姓名: |");
toxy(43,14);
scanf("%s",p->name);
getchar();
toxy(30,15);
printf("| |");
toxy(30,16);
printf("| 年龄: |");
toxy(43,16);
scanf("%d",&p->age);
getchar();
toxy(30,17);
printf("| |");
toxy(30,18);
printf("| 性别: |");
toxy(43,18);
scanf("%c",&p->sex);
getchar();
toxy(30,19);
printf("| |");
toxy(30,20);
printf("| 生日: |");
toxy(43,20);
scanf("%s",p->born);
getchar();
toxy(30,21);
printf("| |");
toxy(30,22);
printf("| 地址: |");
toxy(43,22);
scanf("%s",p->address);
getchar();
toxy(30,23);
printf("| |");
toxy(30,24);
printf("| 电话: |");
toxy(43,24);
scanf("%s",p->phone);
getchar();
toxy(30,25);
printf("| |");
toxy(30,26);
printf("| 邮箱: |");
toxy(43,26);
scanf("%s",p->email);
toxy(30,27);
printf("|--------------------------|");
toxy(30,28);
printf("| 录入成功 按0退出 |");
toxy(30,29);
printf("|--------------------------|");
p->next = head->next;
head->next = p;
/**直接更新到文件,不用等程序退出*/
flush_stu();
char ch = getch();
if(ch == '0')
{
system("cls");
mainmenu();
}
}
void show_Stu() /**打印学生信息*/
{
int z = 13;
system("cls");
link_S p = head->next;
toxy(42,9);
printf(" --按0返回");
show_head();
while(p)
{
printf("%-12s%-8s%-7d%-7c%-12s%-8s%-12s%-14s",p->xueh,p->name,p->age,p->sex,p->born,p->address,p->phone,p->email);
z++;
toxy(1,z);
p = p->next;
}
char ch = getch();
if(ch == 0) mainmenu();
}
void select_Stu() /**学生分类*/
{
link_S p = head->next;
int countM = 0;
int countW = 0;
while(p)
{
if(p->sex=='m')
countM++;
else
countW++;
p = p->next;
}
//界面
show_2_menu();
toxy(35,16);
printf("男生 人数:%-2d",countM);
toxy(35,20);
printf("女生 人数:%-2d",countW);
toxy(33,24);
printf("-------按0返回--------");
char ch;
while(ch = getch()){
if(ch == '0') mainmenu();
}
}
void sort_age() /**插入排序-年龄排序*/
{
link_S newhead, pre, p1, p2;
p1=head->next;
newhead=p1->next; //新链表
p1->next=NULL; //将原来的链断开
while(newhead)
{
p2=newhead;
newhead=newhead->next;
pre=head;
p1=head->next;
while(p1!=NULL && p1->age<p2->age)
{
pre=p1;
p1=p1->next;
}
p2->next=p1;
pre->next=p2;
}
show_Stu();
}
void sort_xueh() /***插入排序,问题,学号是字符串型的,怎么排序----已解决--使用sscanf()函数**/
{
link_S newhead, pre, p1, p2;
p1 = head->next;
newhead = p1->next;
p1->next = NULL;
while(newhead)
{
p2 = newhead;
newhead = newhead->next;
pre = head;
p1 = head->next;
while(p1 != NULL)
{
int n;
int m;
sscanf(p1->xueh,"%d",&n); //字符串转数字函数
sscanf(p2->xueh,"%d",&m);
if(n<m)
{
pre = p1;
p1 = p1->next;
}
else
break; //如果没跳出循环,会一直下去
}
p2->next = p1;
pre->next = p2;
}
show_Stu();
}
//排序界面
void sort_Stu()
{
char ch; //---getch()
show_2_menu();
toxy(37,17);
printf("1 按年龄排序");
toxy(37,19);
printf("2 按学号排序");
toxy(38,24);
printf("----按0返回");
while(ch = getch())
{
if(ch == '1') sort_age();
if(ch == '2') sort_xueh();
if(ch == '0') mainmenu();
}
}
int exitSys() /**退出选项*/
{
toxy(32,25);
printf(" 1 是 2 否 ");
char ch;
while(ch = getch()) //使用循环防止输入其他的情况
{
if(ch=='1')
{
flush_stu(); //退出更新信息到文件
flush_tea();
return 0;
}
if(ch=='2') return 1;
}
}
void check_stu() /**学生登录模块*/
{
link_S p = head->next;
link_P pp = head_pw->next;
char xueh[12];
char pw[10];
int i = 0;
show_2_menu();
toxy(36,16);
printf("学号:"); //此时光标就在后面
scanf("%s",xueh);
getchar();
toxy(36,18);
printf("密码:");
toxy(37,24);
printf("密码以'#'结束");
while( i<10)
{
char ch = getch(); /**用gerch(),将输入密码用一个数组先存起来,然后再匹配*/
if(ch == '#') break;
else
{
pw[i] = ch;
i++;
}
}
while(p) /**判断密码是否正确*/
{
if(strcmp(p->xueh,xueh) == 0 ) //学号
{
//&& strcmp(stupw,pw) == 0
while(pp) //寻找密码
{
if(strcmp(pp->pw,pw) == 0)
{
show_2_menu();
toxy(38,18);
printf("--登录成功--");
Sleep(300);
mainmenu();
break;
}
pp = pp->next;
}
if(pp == NULL) //账号正确,密码错误
{
show_2_menu();
toxy(38,18);
printf("--密码错误--");
Sleep(1000);
chose_menu();
}
}
p = p->next;
}
if(p == NULL) //账号错误
{
show_2_menu();
toxy(38,18);
printf("--学号错误--");
Sleep(1000);
chose_menu();
}
}
void check_tea() /**老师登录登录*/
{
link_G p = head_tea->next;
char name[10];
char pw[10];
int i = 0;
int flag = 1;
show_2_menu();
toxy(38,16);
printf("账号:"); //此时光标就在后面
scanf("%s",name);
getchar();
toxy(38,18);
printf("密码:");
toxy(37,24);
printf("密码以'#'结束");
while(flag && i<10)
{
char ch = getch(); /**用gerch(),将输入密码用一个数组先存起来,然后再匹配*/
if(ch == '#') flag = 0;
else
{
pw[i] = ch;
i++;
}
}
while(p) /**判断密码是否正确*/
{
if(strcmp(p->passward,pw) == 0 && strcmp(p->name,name) == 0)
{
show_2_menu();
toxy(38,18);
printf("--登录成功--");
Sleep(300);
mainmenu();
break;
}
p = p->next;
}
if(p==NULL)
{
show_2_menu();
toxy(38,18);
printf("--登录失败--");
Sleep(1000);
chose_menu();
}
}
void mainmenu() /***主界面*/
{
int flag = 1;
while(flag)
{
system("cls");
HideCursor(); //隐藏光标
show_3();
toxy(30,13);
printf("| 1 学生信息 |");
toxy(30,15);
printf("| 2 学生查询 |");
toxy(30,17);
printf("| 3 信息管理 |");
toxy(30,19);
printf("| 4 信息排序 |");
toxy(30,21);
printf("| 5 学生分类 |");
toxy(30,23);
printf("| 6 退出界面 |");
char ch = getch();
switch(ch)
{
case '1': show_Stu(); break;
case '2': find_Stu(); break;
case '3': check_inform(); break;
case '4': sort_Stu(); break;
case '5': select_Stu(); break;
case '6':
flag = exitSys();
if(flag == 0)
{
system("cls"); //先清屏,再退出
exit(0);
} break;
default : mainmenu(); break;
}
}
}
void chose_menu() //登录模块
{
HideCursor(); //隐藏光标
char ch;
show_3();
toxy(38,16);
printf("1 学生登录");
toxy(38,20);
printf("2 管理登录");
while(ch = getch())
{
if(ch =='1')
{
Flag = 0;
check_stu();
}
if(ch == '2')
{
Flag = 1;
check_tea();
}
}
}
void main()
{
init_stu(); /**初始化学生信息*/
init_tea(); /**初始化管理员信息*/
init_stupw();
//print_pw();
//mainmenu();
chose_menu();
}
因为是使用格式读入链表:所以先在文件中把格式对齐:***(一个空格)***
补充一点:学号后6位是登录密码,输入不回显,以 ‘#’ 结束输入
学生信息
管理员信息
部分界面
这是这学期的一个课程设计,还有很多地方没有完善,功能也不算丰富——比如一些输入验证,存在的一些问题欢迎大家指正,共同进步!!!