带身份认证功能的计算器(第五章4~8节、C程序产品设计) 1. 实现一个口令验证软件:口令长度要求大于等于8且小于等于16;程序预设一个默认管理口令和普通口令;如果用户输入的是管理口令,则允许用户修改程序预设口令,如果用户输入的是普通口令,则提供加减乘除四则运算功能。 2. 要求:1)四则运算功能需判断用户输入的合法性;2)使用模块化编程技术。 3. 编程规范:除了一般规范外,重点关注:1)头文件与源文件的文件头注释的不同;2)函数头注释,包括函数功能、参数、返回值的注释用c语言实现
时间: 2024-03-11 10:49:43 浏览: 114
以下是实现带身份认证功能的计算器的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 声明函数
void printMenu();
int authenticate(char *password);
void changePassword(char *password);
int isOperator(char operator);
double calculate(double num1, double num2, char operator);
// 主函数
int main() {
char adminPassword[] = "admin123"; // 管理员密码
char userPassword[] = "user123"; // 普通用户密码
char password[17]; // 用户输入的密码
int isAuthenticated = 0; // 是否认证通过
int isExit = 0; // 是否退出程序
while (!isExit) {
isAuthenticated = 0; // 重置认证状态
printf("请输入口令:");
scanf("%s", password);
if (strcmp(password, adminPassword) == 0) { // 管理员登录
isAuthenticated = authenticate(adminPassword); // 认证
if (isAuthenticated) {
changePassword(adminPassword); // 修改密码
}
} else if (strcmp(password, userPassword) == 0) { // 普通用户登录
isAuthenticated = authenticate(userPassword); // 认证
if (isAuthenticated) {
double num1, num2; // 两个操作数
char operator; // 运算符
printf("请输入两个数字和一个运算符,以空格分隔:");
scanf("%lf %lf %c", &num1, &num2, &operator);
if (isOperator(operator) && num2 != 0) { // 判断输入合法性
double result = calculate(num1, num2, operator); // 计算结果
printf("计算结果为:%.2lf\n", result);
} else {
printf("输入有误,请重新输入!\n");
}
}
} else if (strcmp(password, "exit") == 0) { // 退出程序
isExit = 1;
} else {
printf("口令错误,请重新输入!\n");
}
}
return 0;
}
// 打印菜单
void printMenu() {
printf("欢迎使用带身份认证功能的计算器!\n");
printf("1. 管理员登录\n");
printf("2. 普通用户登录\n");
printf("3. 退出程序\n");
}
// 口令认证
int authenticate(char *password) {
char input[17]; // 用户输入的口令
printf("口令正确,请输入操作:\n");
printf("(如需退出,请输入“exit”)\n");
while (1) {
printf("> ");
scanf("%s", input);
if (strcmp(input, password) == 0) { // 认证通过
return 1;
} else if (strcmp(input, "exit") == 0) { // 用户退出
return 0;
} else {
printf("口令错误,请重新输入!\n");
}
}
}
// 修改口令
void changePassword(char *password) {
char newPassword[17]; // 新口令
printf("请输入新口令(长度为8~16位):");
scanf("%s", newPassword);
if (strlen(newPassword) >= 8 && strlen(newPassword) <= 16) { // 判断口令长度是否合法
strcpy(password, newPassword); // 修改口令
printf("口令修改成功!\n");
} else {
printf("口令长度不符合要求,请重新输入!\n");
}
}
// 判断是否为运算符
int isOperator(char operator) {
return operator == '+' || operator == '-' || operator == '*' || operator == '/';
}
// 计算结果
double calculate(double num1, double num2, char operator) {
double result;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
result = 0;
break;
}
return result;
}
```
以上代码实现了一个带身份认证功能的计算器,包含口令验证、口令修改、四则运算等功能。其中,主函数循环等待用户输入,并根据用户输入的口令判断是管理员登录还是普通用户登录,然后分别进行口令认证和四则运算等操作。同时,代码中使用了模块化编程技术,将不同功能的代码分别封装在函数中,提高了代码的可读性和可维护性。
阅读全文