题目 系统用户管理系统
【说明及要求】
设系统用户信息(用户代码,用户名,密码,系统身份)存放在一个名为user.txt的文件中,请编写程序实现用户信息的新增。修改密码,删除功能(实现新增和删除时,用户的系统身份必须是“系统管理员”),并能模拟用户的登陆。如果输入的用户代码和密码在文件中存在,则显示欢迎某某用户登陆的界面和操作菜单(N.新增,M.修改密码,D.删除),以用户完成相应操作,如果输入错误则提示用户重新输入(最多可以尝试3次)。
【提示】
(1) 定义一个结构体表示用户信息;
(2) 分别编写函数实现用户信息的新增,修改密码,删除,用户登陆等功能;
(3) 用户的尝试登陆的次数要通过一个静态变量实现。
(4) 编写main函数进行演示。
【要求】:
1. 请给出问题分析与算法设计,并画出流程图:
2. 编写程序,并给出必要的说明与注释;
3. 运行程序,并获得正确结果。
(备注:用C++编程运行)
编程如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define max 20
typedef struct student //学生
{
char sno[max]; // 学号
char sname[max]; //姓名
char sex[max]; //性别
char age[max]; //年龄
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年级
struct student* next;
} student;
student* head;
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{
char username[max],password[max];
printf("\n请输入用户名:");
scanf("%s",username);
printf("\n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//条件i>=0是用于限制退格的范围
{
if(password[i-1]=='\b')//对退格键的处理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';
//已获取密码。验证用户身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登录成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用来建新结点,ptr用来暂存头结点
do
{
s=(student*)malloc(sizeof(student)); // 新建一个学生结点
printf("\n开始注册..."); //开始注册
printf("\n请输入该学生的学号:");
scanf("%s",s->sno);
printf("\n请输入该学生的姓名:");
scanf("%s",s->sname);
printf("\n请输入该学生的性别:");
scanf("%s",s->sex);
printf("\n请输入该学生的年龄:");
scanf("%s",s->age);
printf("\n请输入该学生的系:");
scanf("%s",s->depart);
printf("\n请输入该学生所在的班:");
scanf("%s",s->classs);
printf("\n请输入该学生所在的年级");
scanf("%s",s->grade);
ptr=head;
head=s;//将新结点插入队头
s->next=ptr;
fflush(stdin);
printf("\n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
return;
}
void ElePrint(char str[]) //输出单个元素
{
if(str==NULL) exit
请帮忙给出问题分析与算法设计,并画出流程图,谢谢!