C++程序 要求:1.书屋有40个有效用户,普通用户编号从1-39,1-9号用户能借阅的最大书本数量为5,10-39号用

C++程序 要求:1.书屋有40个有效用户,普通用户编号从1-39,1-9号用户能借阅的最大书本数量为5,10-39号用,第1张

//基本上80%符合了,最后一个管理库存函数没写,不知道是什么意思

//libh

#ifndef LIB_H

#define LIB_H

#include <string>

#include <map>

#include <vector>

#include <fstream>

#include <sstream>

#include <iostream>

using namespace std;

struct User;

class Library{

public:

Library(string lib_file);

void proceedLoadingData(const string &file);

void popMenu(string user_name = string());

void proceedOPtions(int option, string &user_name);

User findUser(const string &user_name);

void userRegister();

void userLogin();

void lookUpBorrowedBook(const string &user_name);

void lookUpBorrowedHistory(const string &user_name);

void addBorrowingBook(const string &user_name);

void deleteBorrowedBook(const string &user_name);

void modifiedUserPassword(const string &user_name);

void manageLibrary();

void saveAndExit();

static int max_user;

private:

string data_file;

User m_user;

int m_userSize;

User m_loginUser;

};

struct User{

User();

string name;

int number;

string password;

int borrowed;

string history;

string book_isbn;

};

#endif

//libcpp

#include "libh"

#include <functional>

int Library::max_user = 40;

Library::Library(string lib_file)

:data_file(lib_file), m_loginUser(NULL){

proceedLoadingData(lib_file);

if(m_userSize == 0){

m_user = new User[40];

m_user[0]name = "Admin";

m_user[0]password = "Admin";

m_user[0]number = 0;

m_user[0]borrowed = 0;

m_user[0]book_isbn = "null";

m_user[0]history = "null";

m_userSize++;

}

}

void Library::proceedLoadingData(const string &file){

ifstream fin;

finopen(filec_str());

if(!fin)

return;

int num_user = 0;

while(finpeek() != EOF){

string line;

getline(fin, line);

num_user++;

}

finclear();

finseekg(0);

m_user = new User[40];

num_user = 0;

while(finpeek() != EOF){

string line;

getline(fin, line);

stringstream s_line(line);

s_line >> m_user[num_user]name >> m_user[num_user]password

>> m_user[num_user]number >> m_user[num_user]borrowed

>> m_user[num_user]book_isbn >> m_user[num_user]history;

num_user++;

if(num_user == Library::max_user)

break;

}

m_userSize = num_user;

finclose();

}

void Library::popMenu(string user_name){

const string menu1 = "==========书屋管理系统============\n1。添加新用户\n2。登录用户\n3。退出\n";

const string menu2 = "==========书屋管理系统============\n1。查看借书记录\n2。查看已借书本\n3。添加借书\n4。注销借书\n5。修改密码\n6。退出\n";

const string menu3 = "==========书屋管理系统============\n1。管理书屋库存\n2。退出\n";

cinsync();

cinclear();

if(user_nameempty())

cout << menu1;

else if (user_name == "Admin")

cout << menu3;

else

cout << menu2;

cout << "请选择:";

int option;

cin >> option;

proceedOPtions(option, user_name);

}

void Library::proceedOPtions(int option, string &user_name){

switch(option){

case 1:

{

if(user_nameempty())

userRegister();

else if (user_name == "Admin")

manageLibrary();

else

lookUpBorrowedHistory(user_name);

break;

}

case 2:

{

if(user_nameempty())

userLogin();

else if(user_name == "Admin")

saveAndExit();

else

lookUpBorrowedBook(user_name);

break;

}

case 3:

{

if(user_nameempty())

saveAndExit();

else if(user_name == "Admin")

cout << "选择错误!" << endl;

else

addBorrowingBook(user_name);

break;

}

case 4:

{

if(user_nameempty() || user_name == "Admin")

cout << "选择错误!" << endl;

else

deleteBorrowedBook(user_name);

break;

}

case 5:

{

if(user_nameempty() || user_name == "Admin")

cout << "选择错误!" << endl;

else

modifiedUserPassword(user_name);

break;

}

case 6:

{

if(user_nameempty() || user_name == "Admin")

cout << "选择错误!" << endl;

else

saveAndExit();

break;

}

default:

cout << "选择错误!" << endl;

}

if(m_loginUser)

user_name = m_loginUser->name;

popMenu(user_name);

}

void Library::userRegister(){

if (m_userSize >= max_user)

{

cout << "用户数已经达到最大!" << endl;

return;

}

string user_name, user_password;

while(true){

cout << "请输入用户名:";

cin >> user_name;

for (int i = 0; i < m_userSize; i++)

{

if(m_user[i]name == user_name){

cout << "用户名已存在!" << endl;

continue;

}

}

break;

}

cout << "请输入密码:";

cin >> user_password;

m_user[m_userSize]name = user_name;

m_user[m_userSize]password = user_password;

m_user[m_userSize]number = m_userSize;

m_user[m_userSize]borrowed = 0;

m_user[m_userSize]book_isbn = "null";

m_user[m_userSize]history = "null";

m_userSize++;

cout << "注册成功!" << endl;

}

void Library::userLogin(){

string user_name;

cout << "请输入用户名:";

cin >> user_name;

for(int i = 0; i < m_userSize; i++){

if(m_user[i]name == user_name){

string password;

while(true){

cout << "请输入密码:";

cin >> password;

if(password != m_user[i]password)

cout << "密码错误!" << endl;

else

break;

}

m_loginUser = &m_user[i];

cout << "登陆成功!" << endl;

return;

}

}

cout << "没有此用户!" << endl;

return;

}

void Library::lookUpBorrowedBook(const string &user_name){

User user = findUser(user_name);

cout << user->book_isbn << endl;

}

void Library::lookUpBorrowedHistory(const string &user_name){

User user = findUser(user_name);

cout << user->history << endl;

}

void Library::deleteBorrowedBook(const string &user_name){

User user = findUser(user_name);

string delete_isbn;

while(true){

cout << "请输入要删除的书本编号:";

cin >> delete_isbn;

if (user->book_isbnfind(delete_isbn) == string::npos)

cout << "没有此书本编号!" << endl;

else{

user->book_isbnreplace(user->book_isbnfind(delete_isbn), delete_isbnsize(), "");

user->borrowed--;

cout << "删除成功!" << endl;

break;

}

}

}

void Library::addBorrowingBook(const string &user_name){

User user = findUser(user_name);

if(((user->number>=1 && user->number<=9) && user->borrowed>=5) ||

((user->number>=10 && user->number<=39) && user->borrowed>=3)){

cout << "已到达最大借书量!" << endl;

return;

}

string book_isbn;

cout << "请输入要借的书本编号:";

cin >> book_isbn;

user->book_isbn == "null" user->book_isbn = book_isbn : user->book_isbnappend("," + book_isbn);

user->history == "null" user->history = book_isbn : user->historyappend("," + book_isbn);

user->borrowed++;

}

void Library::modifiedUserPassword(const string &user_name){

User user = findUser(user_name);

string passowrd;

while(true){

cout << "请输入旧密码:";

cin >> passowrd;

if (passowrd != user->password)

cout << "密码不正确!" << endl;

else

break;

}

string check_password;

do{

cout << "请输入新密码:";

cin >> passowrd;

cout << "请再次输入新密码:";

cin >> check_password;

}while(passowrd != check_password);

user->password = passowrd;

cout << "修改成功!" << endl;

}

User Library::findUser(const string &user_name){

for (int i = 0; i < m_userSize; i++)

{

if(m_user[i]name == user_name)

return &m_user[i];

}

cerr << "寻找用户出现异常!程序终止!" << endl;

return NULL;

}

void Library::manageLibrary(){

}

void Library::saveAndExit(){

ofstream fout;

foutopen(data_filec_str(), ios::out|ios::trunc);

for(int i = 0; i < m_userSize; i++){

fout << m_user[i]name << " " << m_user[i]password << " "

<< m_user[i]number << " " << m_user[i]borrowed << " "

<< m_user[i]book_isbn << " " << m_user[i]history << endl;

}

foutclose();

exit(0);

}

User::User(){

number = 0;

password = "user";

}

//maincpp

#include "libh"

#include <iostream>

int main(){

string file_path = "libtxt";

fstream fin;

finopen(file_pathc_str());

if(!fin){

cout << "默认路径不正确,请手动输入载入数据路径:";

cin >> file_path;

}

Library library = new Library(file_path);

library->popMenu();

return 0;

}

进程在什么情况下可以相同

Liunx *** 作 - Record14—父子进程中的相同与不同 - 恋蛩音的博客 - CSDN博客

2020年2月16日进程共享 fork后: 父子相同处 全局变量、data、text、栈、堆、环境变量、用户ID、宿主

CSDN博客

父子进程 - 龙宇在天 - 博客园

2020年12月18日不同处:1进程ID 2fork返回值 3父进程ID 4进程运行时间 5闹钟(定时器) 6未决信号集 父子进程相同处和不同处是在只读情况下成立,

博客园

父子进程同步 - Fitz1318的博客 - CSDN博客 - 父进程和子进程是同步的

1 如果子进程还未结束,父进程阻塞等待

2 如果子进程已经结束,其终止状态字SIGCHILD放在指定位置等待父进程提取,这时,父进程可立即得到终止状态字并返回

3 如果没有子进程,父进程立即错误返回。

CSDN博客

Linux8 - fork父子进程逻辑地址相同、进程的逻辑地址与物理地址、fork相

1 正常释放结束子进程: 1、进程实体已经被释放; 2、PID内部的exit_code = 0; //进程的退出码,将PID内部的退出码置零; 3

2 非正常流程、僵死状态:没有获取退出码

CSDN博客

大家还在搜

父进程和子进程共享虚拟地址空间

父进程与子进程之间的关系

父子进程共享

并发指的是什么

父进程和子进程相同和不同

父进程如何创建子进程

父进程和子进程具有相同的

父子进程可以并发执行

变量地址相同——虚拟内存 - Ethan - Code的博客 - CSDN博客 - 父进程

5月6日会完全复制父进程的栈空间,包括页表,但没有复制物理页面,所以这时虚拟地址相同,物理地

CSDN博客

父进程在创建子进程之后,哪些东西共享,哪些东西不共享

1 父进程等待子进程完成。在这种情况下,父进程无须对其描述符做任何处理。当子进程终止之后,它曾进行过读、写的人一个共享描述符的文件偏移量

2 父、子进程各自执行不同的程序段。这种情况下,在fork之后,多宝父、子进程各自关闭它们不需使用的文件描述符,这样就不会干扰对方使用的文件描述符

CSDN博客

fork之后父子进程虚拟地址(逻辑地址)相同的问题 - 飞雪一刀的博客 - CS

2014年11月7日可以看到,两个进程中实例的虚拟地址都是一样的,但是实际上指向的是两个不同的变量(物理地

CSDN博客

父子进程folk后的相同点不同点以及进程共享知识点 - 一头特立独行的驴

2020年11月11日父子进程之间在刚fork 后: ​ 相同点:全局变量、data、text、栈、堆、环境变量、用户 ID、宿主目录、进程工作目录、信号处理方式…

CSDN博客

父子进程共享 - 一只小苹果的博客 - CSDN博客 - 父子进程共享

2020年12月3日父子进程不同(重点): 进程id 返回值 各自的父进程 进程创建的时间 闹钟 未决信号集 父子进程共享(重点): 1文件描述符(fd) 2mmap映射区

CSDN博客

大家还在搜

子进程和父进程的理解

父进程和子进程哪些是共享的

父子进程可以同名吗

关于子进程和父进程的说法

用户级线程有没有线程控制块

一个进程可以没有父进程

以下关于父进程和子进程的叙述中

子进程会继承父进程的哪些内容

下一页

父进程在什么情况下可以相同

百度Liunx *** 作 - Record14—父子进程中的相同与不同 - 恋蛩音的博客 - CSDN博客

2020年2月16日进程共享 fork后: 父子相同处 全局变量、data、text、栈、堆、环境变量、用户ID、宿主

CSDN博客

父子进程 - 龙宇在天 - 博客园

2020年12月18日不同处:1进程ID 2fork返回值 3父进程ID 4进程运行时间 5闹钟(定时器) 6未决信号集 父子进程相同处和不同处是在只读情况下成立,

博客园

父子进程同步 - Fitz1318的博客 - CSDN博客 - 父进程和子进程是同步的

1 如果子进程还未结束,父进程阻塞等待

2 如果子进程已经结束,其终止状态字SIGCHILD放在指定位置等待父进程提取,这时,父进程可立即得到终止状态字并返回

3 如果没有子进程,父进程立即错误返回。

CSDN博客

Linux8 - fork父子进程逻辑地址相同、进程的逻辑地址与物理地址、fork相

1 正常释放结束子进程: 1、进程实体已经被释放; 2、PID内部的exit_code = 0; //进程的退出码,将PID内部的退出码置零; 3

2 非正常流程、僵死状态:没有获取退出码

CSDN博客

大家还在搜

父进程和子进程共享虚拟地址空间

父进程与子进程之间的关系

父子进程共享

并发指的是什么

父进程和子进程相同和不同

父进程如何创建子进程

父进程和子进程具有相同的

父子进程可以并发执行

变量地址相同——虚拟内存 - Ethan - Code的博客 - CSDN博客 - 父进程

5月6日会完全复制父进程的栈空间,包括页表,但没有复制物理页面,所以这时虚拟地址相同,物理地

CSDN博客

父进程在创建子进程之后,哪些东西共享,哪些东西不共享

1 父进程等待子进程完成。在这种情况下,父进程无须对其描述符做任何处理。当子进程终止之后,它曾进行过读、写的人一个共享描述符的文件偏移量

2 父、子进程各自执行不同的程序段。这种情况下,在fork之后,多宝父、子进程各自关闭它们不需使用的文件描述符,这样就不会干扰对方使用的文件描述符

CSDN博客

fork之后父子进程虚拟地址(逻辑地址)相同的问题 - 飞雪一刀的博客 - CS

2014年11月7日可以看到,两个进程中实例的虚拟地址都是一样的,但是实际上指向的是两个不同的变量(物理地

CSDN博客

父子进程folk后的相同点不同点以及进程共享知识点 - 一头特立独行的驴

2020年11月11日父子进程之间在刚fork 后: ​ 相同点:全局变量、data、text、栈、堆、环境变量、用户 ID、宿主目录、进程工作目录、信号处理方式…

CSDN博客

父子进程共享 - 一只小苹果的博客 - CSDN博客 - 父子进程共享

2020年12月3日父子进程不同(重点): 进程id 返回值 各自的父进程 进程创建的时间 闹钟 未决信号集 父子进程共享(重点): 1文件描述符(fd) 2mmap映射区

CSDN博客

大家还在搜

子进程和父进程的理解

父进程和子进程哪些是共享的

父子进程可以同名吗

关于子进程和父进程的说法

用户级线程有没有线程控制块

一个进程可以没有父进程

以下关于父进程和子进程的叙述中

子进程会继承父进程的哪些内容

下一页

父进程在什么情况下可以相同

百度

第一,网站要做的正规可查。对于绝大多数互联网产品而言,用户在产生购买欲望后,都会通过互联网来查询产品的来源渠道及产商信息,那么产品网站就成了信息交互的重要渠道。因此网站的建设至关重要,好的网站能让用户一眼看到其中包含的重要信息,增加产品的权威信和真实性。而且还能彰显企业的实力和知名度,让网站为产品背书,以此赢得消费者的信赖。

第二,互联网产品网站要做到真实可信,切勿虚假夸大。对于网站而言,它代表的是一个企业的官方形象和企业信誉,所以在网站建设过程中,对于所售卖的产品要保证真实有效,不能虚假夸大其功能和作用。如果该产品网站存在过度宣传及夸大等行为,会让用户产生反感心理,进而影响购买行为的产生。

第三,网站页面要尽可能的干净整洁,重要内容前置。对于用户而言,当他们在互联网上检索产品网站时,就是为了印证相关的信息,如产品厂家、可靠性、是否有技术背书等等,如果网站做的营销性过强,影响客户的正常浏览,那么就会对客户造成一些不好的体验,这样会影响用户的购买行为。所以互联网产品网站在建站的时候,首页要保持大气、干净、有主次等特点,让用户一眼能看到企业及产品的相关信息,增强用户黏性。

第四,要持续优化并推出新功能。对于互联网产品网站而言,要随时保持与用户的黏性,想要与客户产生深度沟通,那就要在网站上下功夫。不能仅仅局限于网站的普通功能,在抓住用户眼球后,更要深入研发一些新的功能,让用户在使用过程中产生新奇感,培养用户的长期使用习惯。

以上就是关于C++程序 要求:1.书屋有40个有效用户,普通用户编号从1-39,1-9号用户能借阅的最大书本数量为5,10-39号用全部的内容,包括:C++程序 要求:1.书屋有40个有效用户,普通用户编号从1-39,1-9号用户能借阅的最大书本数量为5,10-39号用、父进程在什么情况下可以相同、互联网产品取得用户对网站的信任,有什么基本原则和有效方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9508426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存