日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++:小说阅读器

發(fā)布時(shí)間:2023/12/10 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++:小说阅读器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++:小說閱讀器

這是我自己用 C++ & 減小代碼長(zhǎng)度用的批處理 做的一個(gè)用來看小說的程序,使用批處理主要是不太會(huì)C++Web編程,請(qǐng)求大佬們指教
現(xiàn)在這里還沒加入什么小說,有什么比較好看的請(qǐng)各位推薦

文章目錄

  • C++:小說閱讀器
  • 說明
    • 下載
    • 抱歉,之前打包版出現(xiàn)了小問題,現(xiàn)已解決
  • 更新日志
  • 代碼
    • 1. 打包版本
    • 2. 最新代碼
      • main.exe
      • novel.exe
  • 制作:

說明

這是用的我自己的服務(wù)器,里面的小說需要自己處理才可使用,并且程序會(huì)自動(dòng)更新,更新日志會(huì)在這里發(fā)布。
因?yàn)镃++訪問網(wǎng)絡(luò)過于麻煩,現(xiàn)在正考慮將語言換成Python

下載

抱歉,之前打包版出現(xiàn)了小問題,現(xiàn)已解決

更新日志

2020.8.21前的更新日志忘了

  • 2020.8.21
    添加了學(xué)生機(jī)功能
    版本&版本號(hào):1.0.6-200821 8
  • 2020.9.12
    修改了更新的批處理,將主界面修改為管理員方式運(yùn)行
    版本&版本號(hào):1.0.7-200912 9
  • 2021.7.28 更換服務(wù)器
    不做版本更新,因?yàn)橹暗挠蛎麩o法解析,請(qǐng)重新安裝最新版本

代碼

1. 打包版本

簡(jiǎn)化代碼,只留下更新部分

/* Made In Sakuyark @2021 Sakuyark: https://sakuyark.com Copyright ? 2021 Sakuyark */ //頭文件引入 #include<bits/stdc++.h> #include<windows.h> #include<string> #include<conio.h> #define _for(i,a,b) for(int i=a;i<b;i++) //標(biāo)準(zhǔn)輸出句柄 #define handle GetStdHandle(STD_OUTPUT_HANDLE) //版本號(hào),因?yàn)槭强s減版,所以將版本號(hào)設(shè)為-1,這樣一定會(huì)啟動(dòng)更新 #define EDITION_ID -1 #define EDITION 0.0.0-20190000 using namespace std; //隱藏與顯示光標(biāo)函數(shù) void cursor(bool a){CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);CursorInfo.bVisible = a;SetConsoleCursorInfo(handle, &CursorInfo); } //更新函數(shù) void update(){system("cls");//清屏printf("檢查更新...");/*Windows有個(gè)程序叫bitsadmin,Windows的許多更新就是由它完成的,因?yàn)椴惶珪?huì)C++Web編程所以使用這個(gè)來下載東西*/system("bitsadmin /transfer 檢查更新 https://sakuyark.com/novel/api/edition %cd%\\edition.txt");//下載最新版本信息//讀取最新版本號(hào)ifstream update_input("edition.txt");int editionid;update_input>>editionid;if(editionid>EDITION_ID){//如果最新版本號(hào)大于目前版本,則進(jìn)行更新system("start update");exit(0);} } //初始化函數(shù) void init(){system("mode con cols=90 lines=30");//初始化窗口大小ofstream update_code("update.bat");//輸出更新程序//接下來就是批處理了,不做講解update_code<<"@echo off\n"\<<"set mycd=%cd%\n"\<<"cd /d %~dp0\n"\<<"%1 start \"\" mshta vbscript:createobject(\"shell.application\").shellexecute(\"\"\"%~0\"\"\",\"::\",,\"runas\",1)(window.close)&exit\n"\<<"bitsadmin /transfer 檢查更新 https://sakuyark.com/novel/api/update_list %mycd%\\update_list.txt\n"\<<"for /f \"delims=\" %%i in (update_list.txt) do bitsadmin /transfer 更新文件%%i http://aichistudio.space/static/file/novel/%%i %mycd%\\%%i\n"\<<"start main.exe\n"\<<"exit"; } //主函數(shù) int main(){init();update();return 0; }

2. 最新代碼

  • main.exe

/* Made In Sakuyark @2021 Sakuyark: https://sakuyark.com Copyright ? 2021 Sakuyark */ #include<bits/stdc++.h> #include<windows.h> #include<string> #include<conio.h> #define _for(i,a,b) for(int i=a;i<b;i++) #define handle GetStdHandle(STD_OUTPUT_HANDLE) #define EDITION_ID 9 #define EDITION 1.0.7-200912 using namespace std; void main_interface(); void cursor(bool a){CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);CursorInfo.bVisible = a;SetConsoleCursorInfo(handle, &CursorInfo); } void update(){system("cls&del edition.txt");system("title 檢查更新...");//設(shè)置標(biāo)題printf("檢查更新...");system("bitsadmin /transfer 檢查更新 https://sakuyark.com/novel/api/edition %cd%\\edition.txt");ifstream update_input("edition.txt");int editionid;update_input>>editionid;if(editionid>EDITION_ID){system("start update");exit(0);} } //本地小說 void local_novels(){system("cls&title 本地小說");//設(shè)置標(biāo)題system("dir %cd%\\novels\\* /B > list.txt");//用批處理獲得已有小說列表char novels[500][200]={};//定義小說名稱數(shù)組int n=0;//小說數(shù)量//讀取ifstream local_novel_list("list.txt");while(local_novel_list.getline(novels[n++],200));if(strlen(novels[0])==0){//如果沒有讀取到小說printf("沒有小說");system("pause");return;}n--;//最后一個(gè)名稱為空,所以要減回來/*模擬whileW:...goto W;可以理解為while(1)*/W:system("cls");//清屏//打印屏幕printf("輸入0來返回\n");_for(i,0,n){printf("%d. %s\n",i+1,novels[i]);}printf("id: ");//用戶輸入idint k=0;scanf("%d",&k);if(k==0)return;//id==0則返回主界面if(k>0&&k<=n){//如果id在列表內(nèi)freopen("novel.txt","w",stdout);//對(duì)novel.exe更新正在看的小說printf(novels[k-1]);//選中的小說名稱system("start novel.exe");//啟動(dòng)exit(0);}else{//否則printf("id錯(cuò)誤!");Sleep(2000);//等待2sgoto W;//返回到 W:} } //下載新的 void download_novels(){system("cls");system("title 獲取小說列表...");system("bitsadmin /transfer 獲取小說列表 https://sakuyark.com/novel/api/list %cd%\\weblist.txt");//批處理獲得已有的小說列表//讀取char novels[500][200]={};int n=0;ifstream local_novel_list("weblist.txt");while(local_novel_list.getline(novels[n++],200));n--;W:system("cls&title 下載新小說");//打印_for(i,0,n){printf("%d. %s\n",i+1,novels[i]);}printf("id: ");int k=0;scanf("%d",&k);if(k>0&&k<=n){//id在列表內(nèi)//執(zhí)行下載,利用string來生成批處理代碼string download_code="download ";download_code.append(novels[k-1]);system(download_code.data());return;//返回主界面}else{//否則printf("id錯(cuò)誤!");Sleep(2000);goto W; } } //主界面 void main_interface(){R: //外層循環(huán)system("cls&title 主界面");//打印界面printf("1.本地小說 2.下載新的");W: //不會(huì)重新打印界面char k=getch();//鍵盤讀取if(k=='1')local_novels();//按下 1 else if(k=='2')download_novels();//按下 2else goto W;//都不是這返回,不重新打印界面goto R;//執(zhí)行完則重新打印 } //初始化 void init(){system("mode con cols=90 lines=30");cursor(0);system("md novels");ofstream update_code("update.bat");update_code<<"@echo off\n"\<<"set mycd=%cd%\n"\<<"cd /d %~dp0\n"\<<"%1 start \"\" mshta vbscript:createobject(\"shell.application\").shellexecute(\"\"\"%~0\"\"\",\"::\",,\"runas\",1)(window.close)&exit\n"\<<"bitsadmin /transfer 檢查更新 https://sakuyark.com/novel/api/update_list %mycd%\\update_list.txt\n"\<<"for /f \"delims=\" %%i in (update_list.txt) do bitsadmin /transfer 更新文件%%i https://sakuyark.com/static/file/novel/%%i %mycd%\\%%i\n"\<<"start main.exe\n"\<<"exit";//下載小說的批處理ofstream download_code("download.bat");download_code<<"bitsadmin /transfer 下載《%1》 https://sakuyark.com/static/file/novel/%1.txt %cd%\\novels\\%1"; } VOID ManagerRun(LPCSTR exe,LPCSTR param,INT nShow=SW_SHOW){//以管理員狀態(tài)運(yùn)行 SHELLEXECUTEINFO ShExecInfo; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = "runas"; ShExecInfo.lpFile = exe; ShExecInfo.lpParameters = param; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = nShow; ShExecInfo.hInstApp = NULL; BOOL ret = ShellExecuteEx(&ShExecInfo); CloseHandle(ShExecInfo.hProcess);return; } int main(int argc,char *argv[]){if(argc==1){ShowWindow(GetConsoleWindow(),SW_HIDE);ManagerRun(argv[0],"2");return 1;}else if(argc==2){init();update();main_interface();}return 0; }
  • novel.exe

/* Made In Sakuyark @2021 Sakuyark: https://sakuyark.com Copyright ? 2021 Sakuyark */ #include<bits/stdc++.h> #include<windows.h> #include<conio.h> #define _for(i,a,b) for(int i=a;i<b;i++) #define handle GetStdHandle(STD_OUTPUT_HANDLE) using namespace std; char name[500]; int id,line,n; bool SCM;//學(xué)生機(jī)模式bool值 string novels[100000];//小說內(nèi)容 ifstream novel;//讀取文件的變量 HWND hWnd=GetForegroundWindow();//窗口句柄 void gotoxy(double x,int y){//光標(biāo)定位函數(shù)COORD pos;pos.X=2*x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void cursor(bool a){CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);CursorInfo.bVisible = a;SetConsoleCursorInfo(handle, &CursorInfo); } void init(){//初始化system("mode con cols=90 lines=9999");cursor(0); } void input(){//讀取數(shù)據(jù){//讀取閱讀的小說名稱ifstream tttt("novel.txt");tttt>>name;}{//讀取已看到的章節(jié)ifstream temp(name);temp>>id;}//打開小說string code="novels/";code.append(name);novel.open(code.data());_for(i,0,id+1){//讀取到正在閱讀的章節(jié)getline(novel,novels[i],'|');//章與章之間以“|”分割}n=id;//最大讀取到的章節(jié)數(shù)string title_code="title ";//用string生成標(biāo)題指令title_code.append(name);title_code.append("(按下 Q 啟動(dòng)學(xué)生機(jī)模式)");system(title_code.data()); } void keep(){//保存閱讀進(jìn)度ofstream keeping(name);keeping<<id; } void read(){//閱讀W: //外層循環(huán)system("cls");//打印當(dāng)前小說章節(jié)cout<<novels[id];gotoxy(0,0);//定位光標(biāo)到第一行line=0;//閱讀到的函數(shù)while(1){//循環(huán)讀取鍵盤事件cursor(0);//隱藏光標(biāo)if(_kbhit()){//有鍵盤被按下char k=_getch();//獲取鍵值if(k==72||k=='w'||k=='W'){//按下 ↑ 或 Wif(line>=5){//如果閱讀的行>=5則往上5行line-=5;gotoxy(0,line);}}if(k==80||k=='s'||k=='S'){//按下 ↓ 或 Sline+=5;//往下5行gotoxy(0,line);}if(k==75||k=='a'||k=='A'){//按下 ← 或 Aif(id>0){//不是第一章id--;//往前一張keep();//儲(chǔ)存進(jìn)度goto W;//返回,并重新打印}}if(k==77||k=='d'||k=='D'){//按下 → 或 Did++;//章節(jié)到下一張if(id>n){//如果超出已讀取的范圍,則讀取新的一章n=id;getline(novel,novels[id],'|');}keep();//儲(chǔ)存進(jìn)度goto W;}if(k=='q'||k=='Q'){//如果按下 Qif(!SCM){//沒有啟動(dòng)學(xué)生機(jī)模式string title_code="title ";title_code.append(name);title_code.append("_學(xué)生機(jī)模式(按下Q來關(guān)閉)");system(title_code.data());//設(shè)置新標(biāo)題}else{//否則string title_code="title ";title_code.append(name);title_code.append("(按下 Q 啟動(dòng)學(xué)生機(jī)模式)");system(title_code.data());//取消置頂SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); }SCM=!SCM;}}if(SCM)//如果啟動(dòng)了學(xué)生機(jī)模式,則循環(huán)置頂SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);if(!SCM)Sleep(10);//沒有啟動(dòng)學(xué)生機(jī)模式才有等待,啟動(dòng)學(xué)生機(jī)模式就不等待} } int main(){init();input();read();return 0; }

制作:

From Sakuyark,
網(wǎng)站:https://sakuyark.com
QQ交流群:1032103456

總結(jié)

以上是生活随笔為你收集整理的C++:小说阅读器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。