c++函数头文件,测试未定义

funk.h

#ifndef FUNK_H
#define FUNK_H

double gz(double z_1); // Function 1
double sz(double z_2); // Function 2
double zt(double s_1); // Function 3
double egz(double s_2); // Function 4
double urs(double g_1); // Function 5
double urh(double g_2); // Function 6

#endif

funk.cpp

#include
#include "funk.h"
double a;

double gz(double z_1) // F1
{
double v;
v = z_1 * a;
return v;
}

double sz(double z_2) // F2
{
double s;
s = a * pow(z_2, 2) / 2;
return s;
}

double zt(double s_1) // F3
{
double t;
t = sqrt(2*s_1/a);
return t;
}

double egz(double s_2) // F4
{
double t;
double g;
t = sqrt(2*s_2/a);
g = a * t;
return g;
}

double urs(double g_1) // F5
{
double ug;
ug = g_1 / 3.6;
return ug;
}

double urh(double g_2) // F6
{
double ug;
ug = g_2 * 3.6;
return ug;
}

编译后显示:Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

test1.cpp

#include
#include "funk.h"
using namespace std;

int main()
{

double Z_1; // F1
cin>>Z_1;
cout<<"v = "<<gz(Z_1)<<" m/s"<<endl;

double z_2; // F2
cin>>z_2;
cout<<"s = "<<sz(z_2)<<" m"<<endl;

double s_1; // F3
cin>>s_1;
cout<<"Benötigte Zeit = "<<zt(s_1)<<" s"<<endl;

double s_2; // F4
cin>>s_2;
cout<<"Erreichte Geschwindigkeit = "<<egz(s_2)<<" m/s"<<endl;

double g_1; // F5
cin>>g_1;
cout<<g_1<<" m/s = "<<urs(g_1)<<" km/h"<<endl;

double g_2; // F5
cin>>g_2;
cout<<g_2<<" km/h = "<<urh(g_2)<<" m/s"<<endl;  

return 0;

}

编译test1.cpp,报错:Undefined symbols for architecture x86_64:
"gz(double)", referenced from:
_main in test1-15ae57.o
"sz(double)", referenced from:
_main in test1-15ae57.o
"zt(double)", referenced from:
_main in test1-15ae57.o
"egz(double)", referenced from:
_main in test1-15ae57.o
"urh(double)", referenced from:
_main in test1-15ae57.o
"urs(double)", referenced from:
_main in test1-15ae57.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2个回答

最好把错误贴出来,不清楚你说的是那些函数,你可以尝试看一下,需要的文件有没有编译,然后如果这两个文件都编译了,还会出错,因为有两个main函数,你最好区别一下

xhl1376139719
xhl1376139719 回复Kermit_: 你这两个文件是单独编译的?
大约 2 年之前 回复
xhl1376139719
xhl1376139719 回复Kermit_: 是链接的时候出现的问题,虽然你头文件里包含了但是找不到对应的.o文件,应该是你的funk.cpp没有编译进工程,你check一下你的makefile是不是没有添加该文件。最后还是昨天那句话,只能有一个main函数
大约 2 年之前 回复
Kermit_
Kermit_ 你好,我重新更新了,问题,再麻烦你看看,谢谢
大约 2 年之前 回复

有写makefile吗 贴出来看看。 如果是用的IDE,看下你的工程的配置相关

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++函数头文件,测试未定义
funk.h #ifndef FUNK_H #define FUNK_H double gz(double z_1); // Function 1 double sz(double z_2); // Function 2 double zt(double s_1); // Function 3 double egz(double s_2); // Function 4 double urs(double g_1); // Function 5 double urh(double g_2); // Function 6 #endif funk.cpp #include<cmath> #include "funk.h" double a; double gz(double z_1) // F1 { double v; v = z_1 * a; return v; } double sz(double z_2) // F2 { double s; s = a * pow(z_2, 2) / 2; return s; } double zt(double s_1) // F3 { double t; t = sqrt(2*s_1/a); return t; } double egz(double s_2) // F4 { double t; double g; t = sqrt(2*s_2/a); g = a * t; return g; } double urs(double g_1) // F5 { double ug; ug = g_1 / 3.6; return ug; } double urh(double g_2) // F6 { double ug; ug = g_2 * 3.6; return ug; } 编译后显示:Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) test1.cpp #include<iostream> #include "funk.h" using namespace std; int main() { double Z_1; // F1 cin>>Z_1; cout<<"v = "<<gz(Z_1)<<" m/s"<<endl; double z_2; // F2 cin>>z_2; cout<<"s = "<<sz(z_2)<<" m"<<endl; double s_1; // F3 cin>>s_1; cout<<"Benötigte Zeit = "<<zt(s_1)<<" s"<<endl; double s_2; // F4 cin>>s_2; cout<<"Erreichte Geschwindigkeit = "<<egz(s_2)<<" m/s"<<endl; double g_1; // F5 cin>>g_1; cout<<g_1<<" m/s = "<<urs(g_1)<<" km/h"<<endl; double g_2; // F5 cin>>g_2; cout<<g_2<<" km/h = "<<urh(g_2)<<" m/s"<<endl; return 0; } 编译test1.cpp,报错:Undefined symbols for architecture x86_64: "gz(double)", referenced from: _main in test1-15ae57.o "sz(double)", referenced from: _main in test1-15ae57.o "zt(double)", referenced from: _main in test1-15ae57.o "egz(double)", referenced from: _main in test1-15ae57.o "urh(double)", referenced from: _main in test1-15ae57.o "urs(double)", referenced from: _main in test1-15ae57.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
openGL中 glMatrixMode()函数未定义
初学opengl,在程序中调用glMatrixMode函数,总是提示未定义。网上搜了很久,不知道什么原因,也没找到此函数具体所在哪个头文件,希望大神帮我,谢谢。 我是在qt里面用的下面是我的截图![CSDN移动问答][1] glMatrixMode上面跟下面的函数都是可以正常使用的 这是头文件 ![CSDN移动问答][2] [1]: http://img.my.csdn.net/uploads/201408/08/1407497769_2362.jpg [2]: http://img.my.csdn.net/uploads/201408/08/1407497769_1201.jpg 卡了好久了,希望大神帮解决,感激不尽
opencv4.10版本,cvloadimage()函数在哪个头文件?
如题,opencv4.10在vs2017中使用cvloadimage函数时,提示未定义标识符。 已用的头文件如下: ``` #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include <opencv2\imgproc\types_c.h> #include <opencv2/highgui/highgui_c.h> ```
关于c语言中<io.h>头文件里findfirst函数问题
h:\my documents\visual studio 2013\projects\指定文件查询\指定文件查询\指定文件查询.c(20): warning C4013: “findfirst”未定义;假设外部返回 int 1>h:\my documents\visual studio 2013\projects\指定文件查询\指定文件查询\指定文件查询.c(24): warning C4013: “findnext”未定义;假设外部返回 int 1>指定文件查询.obj : error LNK2019: 无法解析的外部符号 _findfirst,该符号在函数 _main 中被引用 1>指定文件查询.obj : error LNK2019: 无法解析的外部符号 _findnext,该符号在函数 _main 中被引用 我在开头用#include <stdio.h> #include<stdlib.h> #include<Windows.h> #include <io.h> 但为什么还是出现上面的错误提示呢,求大神帮助
QT中使用setSelectable()函数需要包含那个头文件??
使用setSelectable()和setNonSelectable()函数时未定义。。
Linux下gcc无法找到头文件
我的源码目录:main.c lib //lib是一个目录 我把头文件放在lib目录里面,gcc main.c -o test无法找到我放在lib目录里的头文件 在网上搜了一下,说要在 .bashrc 后面加一句:export C_INCLUDE_PATH= 以下是我.bashrc的配置: # .bashrc # User specific aliases and functions** ali asrm='rm -i' alias cp='cp -i' alias mv='mv -i' #Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi export C_INCLUDE_PATH=/root/projects/ConsoleApplication1/lib //这条是新加的 然后再用gcc,依然找不到头文件: #运行 gcc main.c -o test /tmp/cco8z3FL.o:在函数‘main’中: main.c:(.text+0x2a):对‘errExit’未定义的引用 collect2: 错误:ld 返回 1 问题,头文件和源文件在不同的目录,如何编译呢?
C语言中多文件的全局变量声明问题
具体问题请麻烦看链接 [C语言遇到问题](http://blog.csdn.net/u013610563/article/details/50727619 "") 我写了一个函数void match(char* list)/*作用是在list字符串中查找给定子字符串*/ 又写了一个函数void find(void (*match)(char*))/*因为想用函数指针,就把match函数传递进去了 然后find()函数遍历字符串数组。 最后在main()函数中写字符串数组char* shuzu[]的具体内容 然后把match函数,find函数,main函数保存在不同的.c文件中 最后写了一个头文件,其中保存了函数申明,还有那个字符串数组的申明 我是这样写的extern char* shuzu[]; 最后遇到的问题是编译时告诉我find()函数遇到未定义变量shuzu[],,可我不是把它定义成 全局变量保存在头文件中了吗?
VS 2010 中为什么总时提是floor函数未定义?
![图片说明](https://img-ask.csdn.net/upload/201811/09/1541725486_300630.jpg) 如图,同样的代码,在同样的开发环境写的,在手机端C++ APP 中代码完全可行,在PC端庄的VS 2010中运行就总是提是上图的信息,告诉我floor函数调用不明确,已经在头文件中声明了<math.h>,但还是这个样子,求高手解答,是我安装时出现的问题还是其他什么问题?PC端的操作系统是win 10
cuda程序调用核函数时 <<< >>> 显示出错
cuda程序调用核函数时 <<< >>> 显示出错 还有 syncthreads() 也显示未定义, 我查找了源文件加了#define __CUDACC__可以解决,但我觉得并不是好的解决办法。 还有texture,tex1Dfetch都显示未定义,我不知道为什么,需要什么头文件? cuda 7.5,vs2013,win10 都能编译运行通过,但总是显示这么多未定义,为什么,要怎样解决?
opnet模拟仿真CSMA/CD协议退避算法问题
我用opnet14.5+VS2005(打过SP1)进行退避算法仿真的时候 采用自带的WLAN_MAC ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576575646_131944.png) 核心代码编译通过了 ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576575723_806761.png) 但是仿真的时候,出现了未识别的外部符号 ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576575808_904016.png) 这些变量全都在软件自带的函数FB里使用,但是不在本进程定义,也不在已经申明的头文件里 这些变量要如何定义,或者在哪里可以找到软件自己的定义。
net-snmp开发如何添加自己的C代码?
项目需求,需要开发net-snmp (net-snmp5.7.3,Ubuntu12.04),希望能添加自己的C代码(不是添加私有MIB库),最简单的比如添加一个C文件和H文件,功能只是打印一下hello world也行,代码写好之后,不知道如何修改makefile文件使自己的C文件可以被编译进去,直接调用头文件中申明的函数,在编译的时候会报错说函数未定义,求教各位大神呀
C++中取函数地址或者触发事件的问题
我写的一个C++的MFC程序,如下图:PageEndProc这个函数会作为一个回调函数传入funcAplIFEntryEventFunc这个函数,我在头文件里声明了一个事件PostScanEveryPage,需要在回调PageEndProc时触发这个事件。但是因为PageEndProc这个没加作用域限制符CPnScanOCXCtrl::导致调用PostScanEveryPage会提示未定义标识符;如果加上这个标识符,在传入funcAplIFEntryEventFunc会提示转换无效。不知道怎么做才是对的。 ``` // For Tool Kit long _stdcall PageEndProc(CPnScanOCXCtrl* ,SCAN_PAGEINFO* pPage) { gPageCnt++; PostScanEveryPage(gPageCnt); return 0; } LONG CPnScanOCXCtrl::Scan(LONG nXferCount, LONG bAsync) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加调度处理程序代码 long sts; long errNo; if (!funcAplIFEntryEventFunc) { return 0; } if (!funcAplIFScanExec) { return 0; } // set event function sts = funcAplIFEntryEventFunc((long)PageEndProc, NULL, &errNo); } ``` ![图片说明](https://img-ask.csdn.net/upload/201801/18/1516260988_896191.png)
makefile编译不能检测到头文件类中的函数修改
很奇怪的问题,我写了一个测试程序,用makefile进行编译,但如果我在头文件里声明了新的函数,在.cpp文件中定义这个函数,make时会提示我----错误:成员函数‘int mysql_soci_test::sum()’未在类‘mysql_soci_test’中声明--这个错误,但如果我不用makefile编译,用g++直接编译,就不会有问题。 下面是我的g++语句:g++ mysql_soci_test.h mysql_soci_test.cpp mysql_main.cpp -I include/soci -I /usr/include/mysql -L./lib -L /usr/lib64/mysql -lmysqlclient 下面是我的makefile中的语句: INCLUDES = -I include/soci -I /usr/include/mysql LIBS = -lmysqlclient -L./lib -L /usr/lib64/mysql calc: mysql_main.cpp mysql_soci_test.cpp mysql_soci_test.h g++ -o calc mysql_soci_test.h mysql_main.cpp mysql_soci_test.cpp -I. $(INCLUDES) $(LIBS) 感觉应该是没有问题的,但就是会出错,有哪位高手要是知道还望能告知一下,谢谢,在线等......
【c-WinAPI】 程序运行崩溃(自己写的函数出错),求大神帮忙!!!!
# 先行说明: ## 工程简要说明 说明下,这个工程一共5个文件(两个头文件,三个资源文件): 头文件中,一个是宏定义用文件【WinMacro.h】,另一个是函数声明用文件【WinHead.h】; 资源文件中,一个是窗口注册文件(基本可以忽略)【WinMain.c】,第二个是窗口过程文件【WinProc.c】,最后一个里是函数定义文件(主要出错的地方)【WinSupport.c】。 ## 编译器介绍 这里我用的是Dev c++ (v.5.11)编译器,有段时间入了学生联赛的坑,然后现在就有点停不下来,对VC没什么好感,emmm。 ## 对于ERROR的探索 我本来是希望用TextOut函数做一个模拟DrawText函数的新函数:TextPrint,后续还想给它添加一些独特的输出特效,不过现在看来都运行不了(一运行就立即报错,但是编译没问题),尴尬。 万恶的Dev c++调试功能有问题,找了很长时间解决办法之后,就调试了一下,结果就...完全看不懂了。 在下面我标注的【图6】第27行(WinSupport.c)这里单步调试会终止,并弹出显示: > program received signal SIGFPE, Airthmetic expection 然后会显示 Windows CPU 运行表(大概是这个叫法...),但还是看不懂。所以我后面修改了代码,把27、28行都改成了将那两个变量赋值为常数2,而不是即时计算。 顺便改了一下74行,把pcText换成了pChar (74行这里是自己发现的逻辑错误)。 现在各位看到的代码是最初的版本,上面的修改在下面附的代码里都未体现。不是说我懒的修改,而是因为我想把这里弄明白,到底是什么原因。 修改后的代码其实也有问题,那就是虽然可以运行,但是假如在一个矩形内输出了n(n>1)行,那么只有第一行能被保留(啊啊啊,要疯了!!!) ## 最终预期功能 嗯,这里在重申一下,那个TextPrint函数是低配版的DrawText函数,功能就是指定一个矩形,然后向矩形范围内输出(每行填满后自动换行)(假如要输出的内容填满了整个矩形都没有输出完,那就停止输出)。 ## 一些个人看法 自己也试了许多次,但就是不太清楚其中机理,只好劳烦各位“达人”了。 我是直接看书自学的WinAPI,没什么耐性,就先用刚学的新函数TextOut练练手, 所以...挖了个大坑。 个人感觉应该是WinAPI"可重入"的锅,但是实在是没有接触过面向对象的编程(只会一点C),so...... ## 致谢 (.-..-.)刚刚注册的号,学生党一枚,初次提问,言谢在先! # 源代码: 【WinMacro.h】: ```c #define CLASSNAME "Program: Get Seated" #define APPNAME "Tiny Spotlessness: The Seats" #define SIZE_101 SIZEOFSTRING #define SIZEOFSTRING 100 #define EMPTY INITIAL #define INITIAL 0 #define CXSCREEN GetSystemMetrics (SM_CXSCREEN) #define CYSCREEN GetSystemMetrics (SM_CYSCREEN) #define FAULTMSG_101 FAULTMSG_WNDNTNEEDED #define FAULTMSG_WNDNTNEEDED "Fault 101: WindowsNTneeded!" ``` 【图1】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562392986_229499.png) 【WinHead.h】: ```c /*---------------------------------------------------------------- Supporting Header Files -----------------------------------------------------------------*/ #include <windows.h> #include <stdbool.h> #include "WinMacro.h" /*---------------------------------------------------------------- Supporting Value Structions -----------------------------------------------------------------*/ /*---------------------------------------------------------------- Supporting Function Statements -----------------------------------------------------------------*/ LRESULT CALLBACK WndProc ( /*--------------------------------------*/ HWND hwnd, /* Stating the Main Window Process, */ UINT message, /* a special function with four para- */ WPARAM wParam, /* meters, using the other functions. */ LPARAM lParam /*--------------------------------------*/ ); int TextPrint( /*--------------------------------------*/ HDC hdc, /* Print on any place of rect, using */ RECT *pRect, /* a pointer to rect and a pointer to */ const TEXTMETRIC *pTm, /* the text metric, a string with */ const TCHAR *pcText, /* its length, and return the number */ int iLenth /* of the characters outputted. */ ); ``` 【图2】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393250_936313.png) 【图3】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393275_813852.png) 【WinMain.c】: ```c /*-------------------------------------- WinMain.c, (c) Shen Pengfei, 2019 --------------------------------------*/ #include "WinHead.h" int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) { TCHAR szClassName[] = TEXT (CLASSNAME); TCHAR szAppName[] = TEXT (APPNAME); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = EMPTY; wndclass.cbWndExtra = EMPTY; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszClassName = szClassName; wndclass.lpszMenuName = NULL; if (!RegisterClass (&wndclass)) { MessageBox ( NULL, TEXT (FAULTMSG_WNDNTNEEDED), szAppName, MB_ICONERROR ); return EMPTY; } hwnd = CreateWindow ( szClassName, /* window class name */ szAppName, /* window caption name */ WS_OVERLAPPEDWINDOW | WS_VSCROLL, /* window style */ INITIAL, /* initial x position */ INITIAL, /* initial y position */ CXSCREEN, /* initial x size */ CYSCREEN, /* initial y size */ NULL, /* parent window handle */ NULL, /* window menu handle */ hInstance, /* program instance handle */ NULL /* creation parameters */ ); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, EMPTY, EMPTY)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } ``` 【图4】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393472_122237.png) 【图5】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393485_726445.png) 【WinSupport.c】: ```c /*------------------------------------------------ (c) Shen PengFei, 2019 A file to set up some functions to complite some special tasks. -------------------------------------------------*/ #include "WinHead.h" int TextPrint ( HDC hdc, RECT *pRect, const TEXTMETRIC *pTm, const TCHAR *pcText, int iLenth ) { static int iLine; static int iRaw; static int iCount; static const TCHAR *pChar; /*-------------------------------------------- Count the width and the Height of the screen, by the way, creating a pointer copying the address of initial string ---------------------------------------------*/ iLine = (pRect->right - pRect->left) / pTm->tmAveCharWidth; iRaw = (pRect->bottom - pRect->top) / (pTm->tmHeight + pTm->tmExternalLeading); pChar = pcText; for ( iCount = INITIAL; /*------------------------------------------------ To prevent the number of charaters outputt -ed on the screen from overring the string's, check if the result value of [PCHAR minus PCTEXT] was not larger than the length of the string. And also, to prevent the strin -g's overring the initial rect, check if the raw number over the max value counted and called IRAW. -------------------------------------------------*/ pChar - pcText < iLenth && iCount <= iRaw; /*------------------------------------------------ Change the outputting address of each raw, the position of the changed pointer to the string and Add the cyclelatte times value in turn each time, to end the running in time. -------------------------------------------------*/ pRect->top += pTm->tmHeight + pTm->tmExternalLeading, pChar += iLine, iCount ++ ) { /*----------------------------------------------- Solve the special condition that outputted characters' last raw is not enough to make the whole raw full, while may cause that the stuffs behind the address of the string fluent the system running. ------------------------------------------------*/ if ( iLenth % iLine != EMPTY && iCount == iLenth / iLine ) iLine = iLenth % iLine; TextOut ( hdc, pRect->left, pRect->top, pcText, iLine ); } /* Return the initial value used in turn */ pRect->left = pRect->top = INITIAL; return pChar - pcText; } ``` 【图6】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393526_633017.png) 【图7】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393538_23024.png) 【图8】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393576_200998.png) 【WinProc.c】: ```c /*----------------------------------------------- (c) Shen Pengfei, 2019 A file to create a series of windows, used by WINMAIN.C . ------------------------------------------------*/ #include "WinHead.h" LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { static int cxChar; static int cyChar; static RECT rectPrint; static TCHAR szText [SIZEOFSTRING]; HDC hdc; RECT rect; PAINTSTRUCT ps; TEXTMETRIC tm; switch (message) { case WM_CREATE: rectPrint.left = INITIAL; rectPrint.top = INITIAL; rectPrint.right = CXSCREEN; rectPrint.bottom = CYSCREEN; hdc = GetDC (hwnd); /*----------------------------------------- To get the text parameters on its width and height (may with the external leading). ------------------------------------------*/ GetTextMetrics (hdc, &tm); cxChar = tm.tmAveCharWidth; cyChar = tm.tmHeight + tm.tmExternalLeading; ReleaseDC (hwnd, hdc); return EMPTY; case WM_SIZE : rectPrint.right = LOWORD (lParam); rectPrint.bottom = HIWORD (lParam); return EMPTY; case WM_PAINT: hdc = BeginPaint (hwnd, &ps); /* Debugging part */ TextPrint ( hdc, &rectPrint, &tm, szText, wsprintf ( szText, TEXT ("sdaf") ) ); EndPaint (hwnd, &ps); return EMPTY; case WM_DESTROY: PostQuitMessage (EMPTY); return EMPTY; } return DefWindowProc (hwnd, message, wParam, lParam); } ``` 【图9】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393610_312365.png) 【图10】 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393619_968385.png)
这个警告是怎么回事?我把头文件加入进来了,源代码如下
c(14): warning C4013: “gets”未定义;假设外部返回 int #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include <stdlib.h> void main() { void swap(char *, char *);//函数声明 char str1[20], str2[20], str3[20];//定义三个字符串数组 printf("input three line:\n"); gets(str1); gets(str2); gets(str3);//字符串初始化 if (strcmp(str1, str2)>0) swap(str1, str2);//如果str1大,交换 if (strcmp(str1, str3)>0) swap(str1, str3); if (strcmp(str2, str3)>0) swap(str2, str3); printf("Now,the order is:\n"); printf("%s\n%s\n%s\n", str1, str2, str3); system("pause"); } void swap(char *p1, char *p2) { char p[20]; strcpy(p, p1); strcpy(p1, p2); strcpy(p2, p);//字符串排序函数 }
程序运行后txt文本出现乱
程序运行后文本文件出现乱码,四个warning是相同的问题, 看了很多帖子但都没有相关的详细回答 请问这种情况该如何解决 ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576134842_865518.png) ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576134945_774123.png) ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576135365_278865.png) ``` #include<iostream> #include<string.h> #include<iomanip> #include<fstream> #include<stdio.h> #include <stdlib.h> using namespace std; int count=0; class CData //定义数据基类 { public: CData(){}; virtual int Compare(CData &)=0; virtual void Show()=0; virtual ~CData(){}; }; class CNode //定义结点基类 { private: CData *pData; //用于指向数据类的指针 CNode *pNext; //用于指向链表的后向指针 public: void InputData(CData *pdata){pData=pdata;} //输入数据 void ShowNode(){pData->Show();} //打印一个节点的数据 CData *GetData(){return pData;} friend class CList; //定义链表类为基类 }; class CList { CNode *pHead; //链表头结点指针 public: CList(){pHead=0;}; ~CList(){DeleteList();} void AddNode(CNode *pnode); //在首部添加结点 CNode *DeleteNode(CNode *); //删除一个指定的结点,返回该结点的指针 CNode *Search(CData &); //查找一个指定的数据,返回该数据所在的结点在链表的指针,未找到返回0 bool IsExist(CData &); void ShowList(); //打印整个链表 void DeleteList(); //删除整个链表 CNode *GetListHead(){return pHead;} //返回链表首结点 CNode *GetListNextNode(CNode *pnode); //返回链表指定结点的下一个结点 }; CNode *CList::GetListNextNode(CNode *pnode) //返回链表指定结点的下一个结点 { CNode *p1=pnode; return p1->pNext; }; void CList::AddNode(CNode *pnode) //在首部添加结点 { if (pHead==0) //如果是空链表,插入的结点是唯一的结点 { pHead=pnode; pnode->pNext=0; return; } else //否则,插入到链表首部 { pnode->pNext=pHead; pHead=pnode; } }; CNode *CList::DeleteNode(CNode *pnode) //删除一个指定的结点,返回该结点的指针 { CNode *p1,*p2; p1=pHead; //指向首结点 while(p1!=pnode&&p1->pNext!=0) //寻找要删除的结点 { p2=p1; p1=p1->pNext; //结点p2始终在p1的后面 } if (p1==pHead) //如果要删除的是首结点 { pHead=pHead->pNext; //将首结点后移 return pnode; } p2->pNext=p1->pNext; //p1指向被删除的结点,将p2结点与p1后面的结点连接起来 return pnode; } CNode *CList::Search(CData &data) //查找一个指定的数据,返回指针,若未找到返回0 { CNode *p1=pHead; while(p1) //从头结点开始查找 { if (p1->pData->Compare(data)==0) return p1; //找到后返回结点指针 p1=p1->pNext; } return 0; //搜索完找不到,返回空指针0 } void CList::ShowList() //打印整个链表 { CNode *p1=pHead; while(p1) { p1->pData->Show(); p1=p1->pNext; } } void CList::DeleteList() //删除整个链表结点 { CNode *p1,*p2; p1=pHead; while(p1) { delete p1->pData; p2=p1; p1=p1->pNext; delete p2; } } class Repository:public CData //库存为记录,为数据基类的公有派生类 { private : char szName[20]; //库存中数据:商品名、商品数量和入库价格 unsigned int szNumber; char szPrice[20]; char szN; CList ShList; public: Repository(); //构造函数 Repository(char *name,int number,char *price); void SetRecord(char *name, int number,char *price); //输入数据函数 int Compare(CData &); //比较函数,比较商品名 void Show(); void AddRecord(); void Display(); void LookUpRecord(); void DeleteRecord(); void ModifyRecord(); void SaveToFile(); void Operate(string &strChoice); void ReadFromFile(); void Output(); }; Repository::Repository() { strcpy(szName,"\0"); szNumber=0; strcpy(szPrice,"\0"); } Repository::Repository(char *name,int number,char *price) { strcpy(szName,name); szNumber=number; strcpy(szPrice,price); szN=name[0]; } void Repository::SetRecord(char *name, int number,char *price) //输入数据函数 { strcpy(szName,name); szNumber=number; strcpy(szPrice,price); szN=name[0]; } int Repository::Compare(CData &data) //比较商品名 { Repository &temp=(Repository &)data; return strcmp(szName,temp.szName); } void Repository::Show() //打印一个结点的数据 { cout<<setw(15)<<szName<<setw(15)<<szNumber<<setw(15)<<szPrice<<endl; } void Repository::AddRecord() //将记录添加到链表中 { CNode *pNode; Repository *pSh; char szName[20],szPrice[20]; unsigned int szNumber; cout<<"请输入新商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { cout<<"请输入新商品入库价格: "; cin>>szPrice; cout<<"请输入新商品数量: "; cin>>szNumber; pSh=new Repository; //生成新的数据累对象 pSh->SetRecord(szName,szNumber,szPrice); //数据类对象赋值 pNode=new CNode; //生成新的结点 pNode->InputData(pSh); //结点插入链表 ShList.AddNode(pNode); count++; cout<<"请输入新商品名(输入0退出,并进入系统菜单) "; cin>>szName; } cout<<endl<<endl; } void Repository::Display() //显示全部链表数据 { cout<<"当前操作共有"<<count<<"条新商品的添加纪录。\n\n"; cout<<"目前库存共有商品信息记录是:\n\n"; cout<<setiosflags(ios_base::left)<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库价格"<<endl<<endl; ShList.ShowList(); cout<<endl<<endl; system("pause"); system("cls"); } void Repository::LookUpRecord() // 按照商品名查找 { CNode *pLook; char szName[20]; cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):"; cin>>szName; while (strcmp(szName,"0")) { Repository sh(szName,0,"0"); //生成结点 pLook=ShList.Search(sh); //查找指定结点的数据 if (pLook) { cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库价格"<<endl; pLook->ShowNode(); } else cout<<"在库存商品信息记录中找不到商品:"<<szName<<"。"<<endl; cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):"; cin>>szName; } cout<<endl<<endl; } void Repository::DeleteRecord() //在链表中删除指定的结点的数据 { CNode *pLook; char szName[20]; cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //删除时应先查找出结点 { cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库价格"<<endl; pLook->ShowNode(); cout<<"请确定是否删除此商品信息记录(Y/N)【确定删除请输入Y或y,取消删除请输入N或n】:"; char ok; cin>>ok; if (ok=='Y'||ok=='y') { ShList.DeleteNode(pLook); cout<<szName<<"的信息记录删除成功!"<<endl; delete pLook; count--; } else if(ok=='N'||ok=='n') cout<<szName<<"的信息记录删除失败!"<<endl; } else cout<<"在库存商品信息记录中找不到商品:"<<szName<<"。"<<endl; cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):"; cin>>szName; } cout<<endl<<endl; } void Repository::ModifyRecord() //修改商品记录 { CNode *pLook; Repository *pSh; char szName[20],szPrice[20]; unsigned int szNumber; cout<<"请输入您需要修改的商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //修改时应先查找出结点 { cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库价格"<<endl; pLook->ShowNode(); cout<<"-----下面开始修改-----"<<endl<<"请输入修改后的商品名: "; cin>>szName; cout<<"请输入修改后的商品数量:"; cin>>szNumber; cout<<"请输入修改后的商品入库价格: "; cin>>szPrice; cout<<"请确定是否修改此记录(Yes (Y) or No(N)):"; char ok; cin>>ok; if (ok=='Y'||ok=='y') { pSh=new Repository; pSh->SetRecord(szName,szNumber,szPrice); pLook->InputData(pSh); cout<<szName<<"的信息记录修改成功!"<<endl; } else if(ok=='N'||ok=='n') cout<<szName<<"的信息记录修改失败!"<<endl; } else cout<<" 在库存商品信息记录中找不到"<<szName<<","<<endl; cout<<" 请输入您需要修改的商品名(输入0退出,并进入系统菜单):"; cin>>szName; } } void Repository::Output() { CNode *pLook; Repository *pSh; char szName[20]; unsigned int szNumber; cout<<"请输入您需要出库的商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //修改时应先查找出结点 { pSh=(Repository *)pLook->GetData(); cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库价格"<<endl; pLook->ShowNode(); if (0==pSh->szNumber) { cout<<"该商品缺货,请及时补充!"<<endl; } else { cout<<"请输入您要取出的商品数量:"; cin>>szNumber; cout<<"请确定是否取出该商品( Yes (Y) or No(N) ):"; char ok; cin>>ok; if(ok=='Y'||ok=='y') { if(pSh->szNumber<=szNumber) { cout<<szName<<"您要求的商品数量大于仓库中的数量,故全部输出"<<pSh->szNumber<<" 个商品"<<endl; pSh->szNumber=0; } else { pSh->szNumber-=szNumber; cout<<szName<<"您已取出 "<<szNumber<<" 个商品"<<endl; } cout<<szName<<"成功取出!"<<endl; } else if(ok=='N'||ok=='n') cout<<szName<<"您取消了该操作"<<endl; } } else cout<<" 在库存商品信息记录中找不到"<<szName<<","<<endl; cout<<" 请输入您需要出库的商品名(输入0退出,并进入系统菜单):"; cin>>szName; } } void Repository::SaveToFile() //将链表中的数据保存在文件中 { ofstream outfile("repository.txt",ios::binary); if(! outfile) { cout<<"数据文件打开错误,没有将数据存入文件!\n"; return; } CNode *pnode; Repository *pSh; string strName,strNumber; pnode=ShList.GetListHead(); //取出链表首结点指针 while(pnode) { pSh=(Repository *)pnode->GetData(); //返回结点指向的数据域指针 outfile.write((char *)pSh,sizeof(Repository)); //将数据域写入文件 pnode=ShList.GetListNextNode(pnode); // 取下一结点的指针 } outfile.close(); } void Repository::ReadFromFile() //在程序开始先查找有无数据文件,找到后读取文件数据 { ifstream infile("repository.txt",ios::binary); if(! infile) { cout<<"没有数据文件,请您先添加!\n\n"; return; } CNode *pNode; Repository *pSh; while(! infile.eof()) { pSh=new Repository; //定义数据域对象 infile.read((char *)pSh,sizeof(Repository)); pNode=new CNode; pNode->InputData(pSh); //数据域对象内容生成结点 ShList.AddNode(pNode); //将结点加入链表 } ShList.DeleteNode(pNode); //由于文件多读一次,所以将首结点删除 infile.close(); } void Repository::Operate(string &strChoice) //根据主菜单选项进行操作 { if (strChoice=="1") AddRecord(); else if (strChoice=="2") Display(); else if (strChoice=="3") LookUpRecord(); else if (strChoice=="4") DeleteRecord(); else if(strChoice=="5") ModifyRecord(); else if(strChoice=="6") Output(); else if (strChoice=="0") SaveToFile(); else cout<<"对不起,您的输入有误,请重新输入您的选择: "; } int main() { Repository repository; cout<<"*******************************************************************\n\n"; cout<<" 欢迎进入库存管理系统 \n\n"; cout<<"*******************************************************************\n\n"; repository.ReadFromFile(); //从文件中输入数据 string strChoice; //接受主菜单选项 do { cout<<"【欢迎进入系统菜单】:\n\n\n"; cout<<" <1>.添加新商品信息记录\n\n"; cout<<" <2>.显示库存中商品信息记录内容\n\n"; cout<<" <3>.根据商品名查询库存中商品信息记录\n\n"; cout<<" <4>.根据商品名删除库存中商品信息记录\n\n"; cout<<" <5>.根据商品名修改库存中商品信息记录\n\n"; cout<<" <6>.商品出库\n\n"; cout<<" <0>.退出系统\n\n\n"; cout<<"【请输入您的选择】:"; cin>>strChoice; system("cls"); repository.Operate(strChoice); }while(strChoice!="0"); cout<<"***********************************************************************\n\n"; cout<<" ------------******欢迎再次使用库存管理系统******---------- \n\n"; cout<<"***********************************************************************\n\n"; system("pause"); } ```
MFC中为什么会出现“找不到标识符”错误?
在MFC中写程序,在.h头文件中声明了函数,在.cpp文件中定义了函数,但是引用的几个函数都出现“_错误 8 error C3861: “multiply”: 找不到标识符_”错误,鼠标放在引用的函数名上时也并未出现错误,而是出现声明的函数结构,请问这是怎么回事?如图。![图片说明](https://img-ask.csdn.net/upload/201704/10/1491756954_633512.png)
qt creator5.6添加VS2010生成的lib和dll依赖项的问题{求大神们帮忙啦}
如题,使用的是windows下的qt5.6版本,先需要添加一个第三方的.lib和.dll库,头文件也包含了,在网上查了很多方法,也每个都试过,但是编译总是提示类成员函数未定义,求大神帮忙解决一下。
这是职工管理系统的源代码,问题主要是无法以正确格式输出文件内容和修改函数不起作用,希望得到指导。
#include<stdio.h> //标准输入输出函数库 #include<string.h> //strcmp函数使用的头文件 #include<stdlib.h> //标准库头文件system(cls)函数需用到 #include<windows.h> //Sleep函数使用的头文件 #include<conio.h> //getch函数使用的头文件 //宏定义 #define LEN_EMPLOYEE sizeof(struct employee)//employee结构体的长度 #define LEN_ADM sizeof(struct adm)//adm结构体的长度 #define EMPLOYEE_NUM 500//职工的数组大小 #define ADM_NUM 10//管理员的数组大小 #define EMPLOYEE_DATA employeer[i].num,employeer[i].name,employeer[i].sex,employeer[i].age,employeer[i].xueli,employeer[i].wage,employeer[i].addr,employeer[i].tel #define ADM_DATA admer[i].account,admer[i].password //结构体的定义 struct employee { int num; //职工号 char name[20]; //姓名 char sex[10]; //性别 int age; //年龄 char xueli[30]; //学历 int wage; //工资 char addr[30]; //家庭住址 char tel[20]; //联系电话 }; struct adm { int num; //管理员的编号 char account[20]; //管理员的账户 char password[20]; //管理员的密码 }; //全局变量 struct employee employeer[EMPLOYEE_NUM]; struct adm admer[ADM_NUM]; //函数声明部分 void showmainmenu();//显示主菜单 void manager_in();//主管登录 void adm_in();//管理员登录 void employee_in();//职工登录 void managermenu();//主管菜单 void employee_display();//浏览职工信息 int employee_search();//查找职工信息 void employee_del();//删除职工信息 void employee_add();//添加职工信息 void employee_xiugai();//修改职工信息 void adm_add();//添加管理员信息 void adm_display();//浏览管理员信息 void adm_del();//删去管理员信息 void adm_xiugai();//修改管理员信息 int employeefile(char * pcMode);//职工文件函数 void saveemployeefile(int employeeid);//保存职工信息文件函数 void showemployee_xiugaimenu();//显示职工修改菜单 int admfile(char * pcMode);//管理员文件 int adm_search();//管理员查找 void showadm_xiugaimenu();//显示管理员修改菜单 void saveadmfile(int admid);//管理员保存文件函数 void admmenu();//管理员菜单 //主函数 int main() { int n; showmainmenu();/*调用showmainmenu函数绘制界面*/ scanf("%d",&n);/*提示用户输入数字*/ getchar(); while(n)/*当n为0时直接退出程序*/ { switch(n) { case 1: manager_in(); break; case 2: adm_in(); break; case 3: employee_in(); break; default: printf("\t\t请输入正确的数字!\n\t\t程序将于3秒后跳转到主菜单"); Sleep(3000); } showmainmenu(); scanf("%d",&n); getchar(); } return 0; } void showmainmenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 主菜单 |\n"); printf("\t| 身份选择 |\n"); printf("\t| 1.manager |\n"); printf("\t| 2.administrator |\n"); printf("\t| 3.employee |\n"); printf("\t| 0.退出系统 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-3):"); } void manager_in() { int n,i,j=0; char managername[10]; char managerpassword[20]; printf("将于3秒后转至manager登录界面"); Sleep(3000); system("cls"); for(i=0;i<3;i++) { printf("\n\t\t\t请输入你的用户名:"); scanf("%s",managername); printf("\n\t\t\t请输入你的密码:"); scanf("%s",managerpassword); if(strcmp(managername,"limengqi")==0&&strcmp(managerpassword,"123456")==0) { printf("\n\t\t\t登录成功!"); Sleep(1000); j=1; managermenu(); break; } else printf("\t\t\t输入用户名或者密码错误!"); continue; } scanf("%d",&n); getchar(); while(n) { switch(n) { case 1: employee_display(); break; case 2: employee_search(); break; case 3: employee_del(); break; case 4: employee_add(); break; case 5: employee_xiugai(); break; case 6: adm_add(); break; case 7: adm_display(); break; case 8: adm_del(); break; case 9: adm_xiugai(); break; default: printf("\t\t请输入正确的数字!"); } printf("|按任意键返回子菜单|"); getch(); managermenu(); scanf("%d",&n); getchar(); } } void managermenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 子菜单 |\n"); printf("\t| 1.浏览职工信息 |\n"); printf("\t| 2.查询职工信息 |\n"); printf("\t| 3.删除职工信息 |\n"); printf("\t| 4.添加职工信息 |\n"); printf("\t| 5.修改职工信息 |\n"); printf("\t| 6.添加管理员信息 |\n"); printf("\t| 7.浏览管理员信息 |\n"); printf("\t| 8.删除管理员信息 |\n"); printf("\t| 9.修改管理员信息 |\n"); printf("\t| 0.返回主菜单 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-9):"); } void employee_display() { int i,employee_record; system("cls"); employee_record=employeefile("rb"); if(employee_record==-1) printf("文件打开失败,请先添加职工信息!\n"); else if(employee_record==0) printf("文件中没有职工信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); for(i=0;i<employee_record;i++) printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n",EMPLOYEE_DATA); printf("\t|----------------------------------------------------------|\n"); } } void employee_add() { FILE *pfemployee;//文件指针 int employee_record,iflagexist,i; char cFlag; system("cls"); employee_record=employeefile("ab+");//ab+追加方式打开或重建二进制文件 if(employee_record==-1) { printf("文件打开失败!\n"); return; } else if(employee_record==0) printf("文件中没有职工信息!\n"); else employee_display();//如果职工信息不为0则显示所有职工信息 /*以下代码为循环录入职工信息*/ printf("请选择是否要输入职工信息(y/n):"); cFlag=getchar(); getchar(); if(cFlag=='n') return; pfemployee=fopen("employee.txt","ab+"); if( pfemployee==NULL) { printf("文件打开失败!\n"); return; } while(cFlag=='y') { if(employee_record>=EMPLOYEE_NUM)//超过容量范围不能继续写入 { printf("记录已满!"); fclose(pfemployee); return; } printf("请输入职工编号:"); do{ iflagexist=0; scanf("%d",&employeer[employee_record].num); getchar(); for(i=0;i<employee_record;i++) { if(employeer[i].num==employeer[employee_record].num) { iflagexist=1; printf("该职工编号已存在,请重新输入:"); break; } } }while( iflagexist==1); //新增的职工基本信息 printf("请输入职工号:"); scanf("%-6d",&employeer[employee_record].num); getchar(); printf("请输入姓名:"); gets(employeer[employee_record].name); printf("请输入性别:"); scanf("%-10s",&employeer[employee_record].sex); getchar(); printf("请输入年龄:"); scanf("%-6d",&employeer[employee_record].age); getchar(); printf("请输入学历:"); gets(employeer[employee_record].xueli); printf("请输入工资:"); scanf("%-16d",&employeer[employee_record].wage); getchar(); printf("请输入住址:"); gets(employeer[employee_record].addr); printf("请输入电话:"); gets(employeer[employee_record].tel); /*将新增的职工信息写入文件中*/ if(fwrite(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee)!=1) { printf("无法保存该信息!\n"); return; } else { printf("%d号职工信息已保存!\n",employeer[employee_record].num); employee_record++; } printf("继续输入信息吗(y/n)"); cFlag=getchar(); getchar(); } fclose(pfemployee); printf("添加职工信息执行完毕\n"); } int employee_search() { int employeenum,employee_record,employeeid,i; system("cls"); employee_record=employeefile("rb");//以"rb"形式打开文件,如果失败则返回 if(employee_record==-1) { printf("文件打开失败!\n"); printf("|按任意键返回子菜单|"); getch(); return -2;//文件打开失败,返回-2 } else if(employee_record==0) { printf("文件中没有职工信息!\n"); printf("|按任意键返回子菜单|"); getch(); return -3;//文件打开失败,返回-3 } //以下进入查找程序 printf("请输入职工号:"); scanf("%d",&employeenum); getchar(); for(i=0;i<employee_record;i++) { if(employeenum==employeer[i].num ) { employeeid=i;//找到职工记录,返回记录号 printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); printf("\t %-6d %-10s %-10c %-6d %-10s %-16d %-16s %-20s\n",EMPLOYEE_DATA); printf("\t|----------------------------------------------------------|\n"); break; } } if(i==employee_record)//遍历循环,没有找到记录,提示用户 { printf("找不到%d号职工信息!\n",employeenum); employeeid=-1; } return employeeid; } void employee_del() { FILE *pfemployee; int employeeid,employee_record,i; char cFlag;//字符型变量用于选择 system("cls"); employeeid=employee_search();//调用查找函数获得职工记录号 if(employeeid==-1) return; employee_record=employeefile("rb"); printf("已找到该职工,是否删除?(y/n)"); cFlag=getchar(); getchar(); if(cFlag=='n') return; else if(cFlag=='y') { for(i=employeeid;i<employee_record-1;i++) employeer[i]=employeer[i+1];//数组依次前移 employee_record--; } pfemployee=fopen("employee.txt","wb"); if(pfemployee!=NULL) { for(i=0;i<employee_record;i++) { if(fwrite(&employeer[i],LEN_EMPLOYEE,1,pfemployee)!=1) { printf("无法保存该信息!\n"); return; } } fclose(pfemployee); printf("该职工信息已删除!\n"); } } void employee_xiugai() { int employeeid,employee_record,iflagexist,n,num,i; system("cls"); employeeid=employee_search();//调用查找函数获得职工记录号 if(employeeid==-1)//未找到该序号的职工,直接返回 return; //找到该序号的职工,可以进行修改操作 employee_record=employeefile("rb"); showemployee_xiugaimenu();//显示修改选项的菜单 scanf("%d",&n); getchar(); switch(n) { case 1: printf("请输入职工编号:"); do { iflagexist=0; scanf("%d",&n); getchar(); for(i=0;i<employee_record;i++) { if(num==employeer[i].num&&i!=employeeid) { iflagexist=1; printf("错误,该职工编号已存在,请重新输入:"); break; } } }while(iflagexist==1); employeer[employeeid].num=num; break; case 2: printf("请输入职工姓名:"); gets(employeer[employee_record].name); break; case 3: printf("请输入性别:"); scanf("%-10s",employeer[employee_record].sex); getchar(); break; case 4: printf("请输入年龄:"); scanf("%-10d",&employeer[employee_record].age); getchar(); break; case 5: printf("请输入学历:"); gets(employeer[employee_record].xueli); break; case 6: printf("请输入工资:"); scanf("%-16d",&employeer[employee_record].wage); getchar(); break; case 7: printf("请输入住址:"); gets(employeer[employee_record].addr); break; case 8: printf("请输入电话:"); gets(employeer[employee_record].tel); break; } //调用saveemployeefile函数将修改记录存入文件 saveemployeefile(employeeid); printf("职工信息修改成功!\n"); } void showemployee_xiugaimenu() { printf("\n"); printf("\t| 1.职工号 |\n"); printf("\t| 2.姓名 |\n"); printf("\t| 3.性别 |\n"); printf("\t| 4.年龄 |\n"); printf("\t| 5.学历 |\n"); printf("\t| 6.工资 |\n"); printf("\t| 7.住址 |\n"); printf("\t| 8.电话 |\n"); printf("\n"); printf("请输入所要修改的信息(输入相应的数字:1-5):"); } int employeefile(char * pcMode)//该函数负责从文件中读取所有的职工信息,并记录employee_record的值 { int employee_record=0; FILE *pfemployee; pfemployee=fopen("employee.txt",pcMode); if(pfemployee==NULL) return -1; while(!feof(pfemployee)) { if(fread(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee)) employee_record++; } fclose(pfemployee); return employee_record; } void saveemployeefile(int employeeid)//该函数专门负责将职工记录号为employeeid的职工信息写入到文件中 { FILE *pfemployee; pfemployee=fopen("employee.txt","a+"); if(pfemployee!=NULL) { fseek(pfemployee,LEN_EMPLOYEE * employeeid,SEEK_SET); if(fwrite(&employeer[employeeid],LEN_EMPLOYEE,1,pfemployee)!=1) printf("无法保存该信息!\n"); } fclose(pfemployee); } void adm_add() { FILE *pfadm;//文件指针 int adm_record,iflagexist,i; char cFlag; system("cls"); adm_record=admfile("ab+");//ab+追加方式打开或重建二进制文件 if(adm_record==-1) { printf("文件打开失败!\n"); return; } else if(adm_record==0) printf("文件中没有职工信息!\n"); else adm_display();//如果职工信息不为0则显示所有职工信息 /*以下代码为循环录入职工信息*/ printf("请选择是否要输入职工信息(y/n):"); cFlag=getchar(); getchar(); if(cFlag=='n') return; pfadm=fopen("adm.txt","ab+"); if( pfadm==NULL) { printf("文件打开失败!\n"); return; } while(cFlag=='y') { if(adm_record>=ADM_NUM)//超过容量范围不能继续写入 { printf("记录已满!"); fclose(pfadm); return; } printf("请输入管理员编号:"); do{ iflagexist=0; scanf("%d",&admer[adm_record].num); getchar(); for(i=0;i<adm_record;i++) { if(admer[i].num==admer[adm_record].num) { iflagexist=1; printf("该管理员编号已存在,请重新输入:"); break; } } }while( iflagexist==1); //新增的管理员的账户和密码 printf("请输入管理员号:"); scanf("%-6d",&admer[adm_record].num); getchar(); printf("请输入账户:"); gets(admer[adm_record].account); printf("请输入密码:"); gets(admer[adm_record].password); /*将新增的管理员的账户和密码写入文件中*/ if(fwrite(&admer[adm_record],LEN_ADM,1,pfadm)!=1) { printf("无法保存该信息!\n"); return; } else { printf("%d号职工信息已保存!\n",admer[adm_record].num); adm_record++; } printf("继续输入信息吗(y/n)"); cFlag=getchar(); getchar(); } fclose(pfadm); printf("添加管理员账户和密码执行完毕\n"); } void adm_display() { int i,adm_record; system("cls"); adm_record=admfile("rb"); if(adm_record==-1) printf("文件打开失败,请先添加管理员信息!\n"); else if(adm_record==0) printf("文件中没有管理员信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-20s %-20s\n","管理员编号","账户","密码"); for(i=0;i<adm_record;i++) printf("\t %-6d %-20s %-20s\n",ADM_DATA); printf("\t|----------------------------------------------------------|\n"); } } void adm_del() { FILE *pfadm; int admid,adm_record,i; char cFlag;//字符型变量用于选择 system("cls"); admid=adm_search();//调用查找函数获得管理员记录号 if(admid==-1) return; adm_record=admfile("rb"); printf("已找到该管理员,是否删除?(y/n)"); cFlag=getchar(); getchar(); if(cFlag=='n') return; else if(cFlag=='y') { for(i=admid;i<adm_record-1;i++) admer[i]=admer[i+1];//数组依次前移 adm_record--; } pfadm=fopen("adm.txt","wb"); if(pfadm!=NULL) { for(i=0;i<adm_record;i++) { if(fwrite(&admer[i],LEN_ADM,1,pfadm)!=1) { printf("无法保存该信息!\n"); return; } } fclose(pfadm); printf("%d号管理员信息已删除!\n",admer[i].num); } } void adm_xiugai() { int admid,adm_record,iflagexist,n,num,i; system("cls"); admid=adm_search();//调用查找函数获得管理员记录号 if(admid==-1)//未找到该序号的管理员,直接返回 return; //找到该序号的管理员,可以进行修改操作 adm_record=admfile("rb"); showadm_xiugaimenu();//显示修改选项的菜单 scanf("%d",&n); getchar(); switch(n) { case 1: printf("请输入管理员编号:"); do { iflagexist=0; scanf("%d",&n); getchar(); for(i=0;i<adm_record;i++) { if(num==admer[i].num&&i!=admid) { iflagexist=1; printf("错误,该管理员编号已存在,请重新输入:"); break; } } }while(iflagexist==1); admer[admid].num=num; break; case 2: printf("请输入管理员账户:"); gets(admer[adm_record].account); break; case 3: printf("请输入管理员密码:"); gets(admer[adm_record].password); break; } //调用saveadmfile函数将修改记录存入文件 saveadmfile(admid); printf("管理员信息修改成功!\n"); } void showadm_xiugaimenu() { printf("\n"); printf("\t| 1.管理员编号 |\n"); printf("\t| 2.账户 |\n"); printf("\t| 3.密码 |\n"); printf("\n"); printf("请输入所要修改的信息(输入相应的数字:1-3):"); } int admfile(char * pcMode)//该函数负责从文件中读取所有的管理员信息,并记录adm_record的值 { int adm_record=0; FILE * pfadm; pfadm=fopen("adm.txt",pcMode); if(pfadm==NULL) return -1; while(!feof(pfadm)) { if(fread(&admer[adm_record],LEN_ADM,1,pfadm)) adm_record++; } fclose(pfadm); return adm_record; } void saveadmfile(int admid)//该函数专门负责将管理员记录号为admid的管理员信息写入到文件中 { FILE *pfadm; pfadm=fopen("adm.txt","r+"); if(pfadm!=NULL) { fseek(pfadm,LEN_ADM * admid,SEEK_SET); if(fwrite(&admer[admid],LEN_ADM,1,pfadm)!=1) printf("无法保存该信息!\n"); } fclose(pfadm); } int adm_search() { int admnum,adm_record,admid,i; system("cls"); adm_record=admfile("rb");//以"rb"形式打开文件,如果失败则返回 if(adm_record==-1) { printf("文件打开失败!\n"); printf("|按任意键返回子菜单|"); getch(); return -2;//文件打开失败,返回-2 } else if(adm_record==0) { printf("文件中没有职工信息!\n"); printf("|按任意键返回子菜单|"); getch(); return -3;//文件打开失败,返回-3 } //以下进入查找程序 printf("请输入职工号:"); scanf("%d",&admnum); getchar(); for(i=0;i<adm_record;i++) { if(admnum==admer[i].num ) { admid=i;//找到职工记录,返回记录号 printf("\t %-6d %-20s %-20s\n","管理员编号","账户","密码"); printf("\t %-6d %-20s %-20s\n",ADM_DATA); printf("\t|----------------------------------------------------------|\n"); break; } } if(i==adm_record)//遍历循环,没有找到记录,提示用户 { printf("找不到%d号职工信息!\n",admnum); admid=-1; } return admid; } void adm_in() { int i,n,k,j=-1,adm_record; char admaccount[20]; char admpassword[20]; FILE *fpadm; adm_record=admfile("rb"); printf("将于3秒后转至administrator登录界面"); Sleep(3000); system("cls"); for(k=0;k<3;k++) { printf("\n\t\t\t请输入你的账户名:"); scanf("%s",admaccount); printf("\n\t\t\t请输入你的登入密码:"); scanf("%s",admpassword); for(i=0;i<adm_record;i++) { if(strcmp(admer[i].account,admaccount)==0&&strcmp(admer[i].password,admpassword)==0) { printf("\n\t\t\t登入成功!"); j=1; admmenu(); goto loop; } else printf("\t\t\t用户名或者密码错误,请重新输入:"); break; } } if(j==-1) { printf("\t连续输入错误3次,即将退出程序\n"); Sleep(1000); exit(0); } loop: scanf("%d",&n); getchar(); while(n) { switch(n) { case 1: employee_display(); break; case 2: employee_search(); break; case 3: employee_del(); break; case 4: employee_add(); break; case 5: employee_xiugai(); break; default: printf("\t\t请输入正确的数字!"); } printf("|按任意键返回子菜单|"); getch(); admmenu(); scanf("%d",&n); getchar(); } } void admmenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 子菜单 |\n"); printf("\t| 1.浏览职工信息 |\n"); printf("\t| 2.查询职工信息 |\n"); printf("\t| 3.删除职工信息 |\n"); printf("\t| 4.添加职工信息 |\n"); printf("\t| 5.修改职工信息 |\n"); printf("\t| 0.返回主菜单 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-5):"); } void employee_in() { int n,employee_record; system("cls"); printf("\n\n\n\n\n"); employee_record=employeefile("rb"); if(employee_record==-1) printf("文件打开失败,你的信息还没有被添加!\n"); else if(employee_record==0) printf("文件中没有你的信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); printf("请输入你的职工号:\n"); scanf("%d",&n); printf("\t %-6d %-10s %-10c %-6d %-10s %-16d %-16s %-20s\n",employeer[n-1].num,employeer[n-1].name,employeer[n-1].sex,employeer[n-1].age,employeer[n-1].xueli,employeer[n-1].wage,employeer[n-1].addr,employeer[n-1].tel); printf("\t|----------------------------------------------------------|\n"); } }
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的Tencent Kona JDK,分布式HTAP数据库 TBase,企业级容器平台TKEStack,以及高性能图计算框架Plato。短短一周之内,腾讯开源了五大重点项目。其中,TubeMQ是腾讯大数据平台部门应用的核心组件,...
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问