#pragma once
#include <iostream>
#include "libxl.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <Windows.h>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <time.h>
#include <conio.h>
#include "顺序表读入.cpp"
using namespace libxl;
using namespace std;
#define N 200
#define M 1000
typedef struct StockIII//定义结构体
{
char Date[9];//日期
char StartPrice[10];//开盘价
char EndPrice[10];//收盘价
char HighPrice[10];//最高价
char LowPrice[10];//最低价
char BargainNum[15];//成交量
char BargainTotalPrice[10];//成交额
char ExchangeRate[10];//换手率
char ChangeAmount[10];//涨跌额
char ChangeRate[10];//涨跌幅
string Number;//股票代码
string BriefName;//股票简称
};
typedef struct LNodeI
{
StockIII* data;
double userStartPrice;
double userEndPrice;
string userChangeRate;
string StockNumber;
string StockName;
int dataLength;
struct LNodeI* next;
}LNodeI, * linklistI;
//inline wchar_t* StringToWchar(const string& pKey)
//{
// const char* pCStrKey = pKey.c_str();
// //第一次调用返回转换后的字符串长度,用于确认为wchar_t*开辟多大的内存空间
// int pSize = MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, NULL, 0);
// wchar_t* pWCStrKey = new wchar_t[pSize];
// //第二次调用将单字节字符串转换成双字节字符串
// MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, pWCStrKey, pSize);
// return pWCStrKey;
//}
inline void SortList(linklistI H,int c)
{
linklistI p, q, r, s;
if (H == NULL)
{
return;
}
p = H->next;
H->next = NULL;//分离表头和数据
switch (c)
{
case 1:
{
while (p)//循环剩下的表
{
r = p->next;
q = H->next;
s = H;
while (q && p->userStartPrice < q->userStartPrice)
{
s = q;
q = q->next;
}
p->next = q;
s->next = p;
s = p;
p = r;
}
break;
}
case 2:
{
while (p)//循环剩下的表
{
r = p->next;
q = H->next;
s = H;
while (q && p->userEndPrice < q->userEndPrice)
{
s = q;
q = q->next;
}
p->next = q;
s->next = p;
s = p;
p = r;
}
break;
}
case 3:
{
int i;
while (p)//循环剩下的表
{
r = p->next;
q = H->next;
s = H;
char temp1[10], temp2[10];
double t1, t2;
for (i = 0; p->userChangeRate[i] != '%'; i++)
{
temp1[i] = p->userChangeRate[i];
}
temp1[i] = '\0';
t1 = atof(temp1);
//cout << "t1 = " << t1 << endl;
if (q)
{
for (i = 0; q->userChangeRate[i] != '%'; i++)
{
temp2[i] = q->userChangeRate[i];
}
temp2[i] = '\0';
t2 = atof(temp2);
//cout << "t2 = " << t2 << endl;
}
while (q && t1 < t2)
{
s = q;
q = q->next;
if (q)
{
for (i = 0; q->userChangeRate[i] != '%'; i++)
{
temp2[i] = q->userChangeRate[i];
}
temp2[i] = '\0';
t2 = atof(temp2);
//cout << "t2 = " << t2 << endl;
}
}
p->next = q;
s->next = p;
s = p;
p = r;
}
break;
}
}
}
inline void InsertSort()
{
int i, j;
struct Enterprise* B;
B = list();
linklistI L;
L = new LNodeI;
L->next = NULL;
linklistI q = L;
for (j = 0; j < 200; j++)
{
int n = 0;
string number;
StockIII* list = new StockIII[M];
number = B[j].Number;
number.append(".txt");
FILE* fs = NULL, * fp = NULL;
fs = fopen(number.c_str(), "r");
if (fs == NULL)
{
printf("%s程序出现错误!\n",number);
//return 0;
}
else
{
fseek(fs, 88, SEEK_SET);//调整指针位置
for (i = 0; i < M; i++)//文件读取
{
fscanf(fs, "%s", list[i].Date);
fscanf(fs, "%s", list[i].StartPrice);
fscanf(fs, "%s", list[i].EndPrice);
fscanf(fs, "%s", list[i].HighPrice);
fscanf(fs, "%s", list[i].LowPrice);
fscanf(fs, "%s", list[i].BargainNum);
fscanf(fs, "%s", list[i].BargainTotalPrice);
fscanf(fs, "%s", list[i].ExchangeRate);
fscanf(fs, "%s", list[i].ChangeAmount);
fscanf(fs, "%s", list[i].ChangeRate);
n++;
if (feof(fs) != 0) break;//判断是否读取完毕
}
fclose(fs);
//cout << list[1].Date << endl << list[1].StartPrice << endl << list[1].EndPrice << endl << list[1].HighPrice << endl << list[1].LowPrice << endl << list[1].BargainNum << endl << list[1].BargainTotalPrice << endl << list[1].ExchangeRate << endl << list[1].ChangeAmount << endl << list[1].ChangeRate << endl;
//cout << "输入1继续查询,输入0退出:";
}
linklistI p = new LNodeI;
p->data = list;
//strcpy(p->StockName.c_str(), B[j].BriefName.c_str());
p->StockName = B[j].BriefName;
p->StockNumber = B[j].Number;
p->dataLength = n;
p->next = NULL;
q->next = p;
q = q->next;
//cout << q->data[0].Date << endl << q->StockName << endl << q->StockNumber << endl << endl;
}
while (1)
{
int flag;
system("cls");
string userdate;
cout << "请输入查询日期:";
cin >> userdate;
int ffflag = 0;
if (strlen(userdate.c_str()) != 8)
{
cout << "日期格式有误!" << endl;
}
else
{
q = L->next;
while (q)//读入该日信息
{
int fflag = 0;
for (i = 0; i < q->dataLength; i++)
{
if (!strcmp(q->data[i].Date, userdate.c_str()))
{
q->userStartPrice = atof(q->data[i].StartPrice);
q->userEndPrice = atof(q->data[i].EndPrice);
q->userChangeRate = q->data[i].ChangeRate;
fflag = 1;
ffflag = 1;
break;
}
}
if (!fflag)
{
q->userStartPrice = NULL;
q->userEndPrice = NULL;
q->userChangeRate = " ";
}
q = q->next;
}
if (!ffflag)
{
cout << "暂无该日信息!" << endl;
}
else
{
int paixu;
cout << "请输入排序依据,1 开盘价;2 收盘价;3 涨跌幅:";
fflush(stdin);
cin >> paixu;
if (paixu == 1)
{
SortList(L, 1);
/*q = L->next;
while (q)
{
cout << q->userStartPrice << endl;
q = q->next;
}*/
Book* book = xlCreateXMLBook();//创建一个XLSX的实例,在使用前必须先调用这个函数创建操作excel的对象
book->setKey(L"TommoT", L"windows-2421220b07c2e10a6eb96768a2p7r6gc");//设置用户注册信息,是否正版就在这里验证,否则第一行无法操作
if (book) {
Sheet* sheetwrite = book->addSheet(L"sheet1");;//生成第一个表
if (sheetwrite)
{
int m, n;
m = 201;
n = 6;
string label[6];
label[0] = "序号";
label[1] = "股票代码";
label[2] = "股票名称";
label[3] = "开盘价(万元)";
label[4] = "收盘价(万元)";
label[5] = "涨跌幅";
for (int col = 0; col < n; ++col)
{
int row = 0;
wchar_t* wchar = StringToWchar(label[col]);
sheetwrite->writeStr(row, col, wchar);
delete[]wchar;
}
for (int row = 1; row < m; ++row)
{
int col = 0;
sheetwrite->writeNum(row, col, row);
}
q = L->next;
for (int row = 1; row < m; ++row)//按行遍历
{
for (int col = 1; col < n; ++col)//按列遍历
{
string str;
//cin >> str;
switch (col)
{
case 1: str = q->StockNumber; break;
case 2: str = q->StockName; break;
case 3: str = to_string(q->userStartPrice); break;
case 4: str = to_string(q->userEndPrice); break;
case 5: str = q->userChangeRate; break;
}
wchar_t* wchar = StringToWchar(str);
sheetwrite->writeStr(row, col, wchar);
delete[]wchar;
}
q = q->next;
}
}
////保存excel
if (book->save(L"开盘价排序.xlsx"))
{
//::ShellExecute(NULL, "open", "example.xls", NULL, NULL, SW_SHOW);
cout << "开盘价排序已生成!" << endl;
}
e
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip
共32个文件
cpp:30个
zip:1个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 25 浏览量
2023-12-29
10:05:55
上传
评论 1
收藏 101KB ZIP 举报
温馨提示
【资源说明】 基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip 基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip 基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!
资源推荐
资源详情
资源评论
收起资源包目录
基于C++实现的股票查询分析系统源码+超详细注释(数据结构课设).zip (32个子文件)
2.2按行业分析.cpp 12KB
说明.md 70B
1.4股票价格信息.cpp 4KB
2.4股票相关性分析.cpp 10KB
2.5.2卡尔股票基金筛选.cpp 7KB
提交代码程序
2.2按行业分析.cpp 12KB
1.4股票价格信息.cpp 4KB
2.4股票相关性分析.cpp 10KB
2.5.2卡尔股票基金筛选.cpp 7KB
2.5普利姆股票基金筛选.cpp 7KB
顺序表读入.cpp 6KB
股票代码二叉排序树.cpp 3KB
1.3股票详细信息.cpp 2KB
0入口.cpp 6KB
2.1按时间分析.cpp 12KB
1.2股票网址信息.cpp 2KB
2.3按收盘价分析.cpp 10KB
1.3.2股票基本信息的删除.cpp 5KB
2.6二部图股票基金筛选.cpp 5KB
1.1股票基本信息.cpp 4KB
2.5普利姆股票基金筛选.cpp 7KB
顺序表读入.cpp 6KB
股票代码二叉排序树.cpp 3KB
1.3股票详细信息.cpp 2KB
提交代码程序.zip 34KB
0入口.cpp 6KB
2.1按时间分析.cpp 12KB
1.2股票网址信息.cpp 2KB
2.3按收盘价分析.cpp 10KB
1.3.2股票基本信息的删除.cpp 5KB
2.6二部图股票基金筛选.cpp 5KB
1.1股票基本信息.cpp 4KB
共 32 条
- 1
资源评论
- makabaka_T_T2024-06-16资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
- qq228856330082024-06-15感谢资源主的分享,这个资源对我来说很有用,内容描述详尽,值得借鉴。
- 2301_813347142024-06-03资源内容总结的很到位,内容详实,很受用,学到了~.whl2024-06-08加油
.whl
- 粉丝: 3821
- 资源: 4648
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功