The Last Experiment

2023-11-22 14:40
文章标签 last experiment

本文主要是介绍The Last Experiment,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、实验目的:

二、实验工具:

三、准备工作:

1、在虚拟机上配置win10系统。

2、Oracle11g:

3、安装和使用gcc: 

四、开始实验

1、在Oracle数据库中建表并插入:

2、使用gcc进行proc编程

(1)创建一个新的项目文件夹(可以是任意位置)

(2)将pc文件复制到此文件夹

(3)编写Makefile文件

(4)DOS窗口执行指令进行编译

(5)在Dos窗口输入:

(6)双击生成的exe文件就可以执行了

五、做题

 代码1:

代码2:

六、结语:


一、实验目的:

        练习Proc编程。

二、实验工具:

        VMW虚拟机。

        Oracle数据库。

        gcc编译器。

注:因为本人物理机上缺乏相关插件,导致Oracle无法正常启动和使用,所以本次实验在虚拟机上完成。

三、准备工作:

1、在虚拟机上配置win10系统。

虚拟机安装包及windows系统镜像链接:

链接:https://pan.baidu.com/s/1uq0nAsLaQoSRedSqBnmckQ 
提取码:gyet

安装虚拟机教程:

虚拟机不能连网?教你正确安装虚拟机_哔哩哔哩_bilibiliicon-default.png?t=M3K6https://www.bilibili.com/video/BV1Ba4y1t7ic?spm_id_from=333.1007.top_right_bar_window_history.content.click[装机工具]VMware虚拟机安装及使用教程/解决Win10玩游戏卡顿、win7及win10激活工具..._哔哩哔哩_bilibiliicon-default.png?t=M3K6https://www.bilibili.com/video/BV1Cb41177pr?spm_id_from=333.1007.top_right_bar_window_history.content.click

2、Oracle11g:

链接:

链接:https://pan.baidu.com/s/1MGkqZK6ZmHxGACseJqX5RQ 
提取码:q9h7

安装教程: 

Oracle(11g)数据库安装详细图解教程_百里慕溪的博客-CSDN博客_oracle数据库11g安装教程icon-default.png?t=M3K6https://blog.csdn.net/duoyu779553/article/details/105788791

如果出现监听器错误,下面是解决办法:

(1条消息) 关于连接Oracle数据库时出现的“ORA-12541:TNS 无监听程序”和“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”的解决办法_代码骑士的博客-CSDN博客icon-default.png?t=M3K6https://blog.csdn.net/qq_51701007/article/details/124660215?spm=1001.2014.3001.5501

安装好后设置环境变量(后面编译gcc代码要用到!!!) 

 

3、安装和使用gcc: 

(这步是跟大佬新学的,在此表示:非常感谢!)

看这个教程:
(1条消息) 用gcc编译器实现PC编程_代码骑士的博客-CSDN博客icon-default.png?t=M3K6https://blog.csdn.net/qq_51701007/article/details/124661250?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124661250%22%2C%22source%22%3A%22qq_51701007%22%7D&ctrtid=BdhwE

四、开始实验

1、在Oracle数据库中建表并插入:

/**建立三张表,并插入数据 */
set feedback off; 
show user;
drop table sc;
drop table s;
drop table c;create table s(sno char(4) not null primary key,sname varchar2(10),sex char(3),dept varchar2(4),age int 
);
insert into s values('801','金贤重','男','CS',23);
insert into s values('802','李敏镐','男','MA',25);
insert into s values('803','那英','女','CS',41);
insert into s values('804','金秀贤','女','MA',24);
insert into s values('805','刘德华','男',null,52);
insert into s values('806','文章','男','CS',27);
insert into s values('807','刘欢','男','MA',51);
insert into s values('808','马伊琍','女','CS',36);
insert into s values('809','姚笛','女','MA',23);
insert into s values('810','周杰伦','男',null,39);create table c(cno char(3) primary key,cname varchar2(20),credit int
);
insert into c values('01','数据库概论',3);
insert into c values('02','OS',4);
insert into c values('03','OOP',2);
insert into c values('04','Java',3);
insert into c values('05','Python',3);
insert into c values('06','D语言讲座',2);create table sc(sno char(4),cno char(3),grade numeric(3),constraint sc_pk primary key(sno,cno),constraint sc_fk1 foreign key(sno) references s(sno),constraint sc_fk2 foreign key(cno) references c(cno),constraint sc_grade check (grade between 0 and 100 or grade is null)
);insert into sc values('801','01',81);
insert into sc values('802','01',59);
insert into sc values('803','01',0);
insert into sc values('804','01',60);
insert into sc values('805','01',30);
insert into sc values('806','01',90);
insert into sc values('807','01',60);
insert into sc values('808','01',null);  insert into sc values('801','02',null);
insert into sc values('802','02',30);
insert into sc values('803','02',45); 
insert into sc values('804','02',80);
insert into sc values('805','02',70);
insert into sc values('806','02',60); insert into sc values('801','03',90);
insert into sc values('802','03',60);
insert into sc values('803','03',40);
insert into sc values('804','03',null);
insert into sc values('805','03',50);
insert into sc values('806','03',70);
insert into sc values('807','03',70);
insert into sc values('808','03',80);insert into sc values('801','04',40);
insert into sc values('802','04',0);
insert into sc values('803','04',null); 
insert into sc values('804','04',80);
insert into sc values('805','04',90);   
insert into sc values('806','04',60);
insert into sc values('807','04',70);
insert into sc values('808','04',50); insert into sc values('809','05',0);  commit;select * from s;
select * from c;
select * from sc; 

输出数据:

 

 

 

2、使用gcc进行proc编程

(3.3的步骤做好才能进行这步。)

(1)创建一个新的项目文件夹(可以是任意位置)

(2)将pc文件复制到此文件夹

(一开始只有这一个文件) 

(3)编写Makefile文件

创建Makefile文件

先来了解一下它:(1条消息) Makefile教程(绝对经典,所有问题看这一篇足够了)_GUYUEZHICHENG的博客-CSDN博客_makefileicon-default.png?t=M3K6https://blog.csdn.net/weixin_38391755/article/details/80380786?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165207221416781432988413%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165207221416781432988413&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-80380786-null-null.142^v9^pc_search_result_control_group,157^v4^control&utm_term=Makefile&spm=1018.2226.3001.4187怎么创建:

        在文件夹中新建一个文档,更改名字为Makefile,然后删去扩展名就可以了。

                                       

 编写(也可创建完直接编写再删去扩展名):

#Project example_1example: example.ogcc -o example example.o $(ORACLE_HOME)\BIN\oci.dll
example.o: example.cgcc -c example.c -I $(ORACLE_HOME)\precomp\public
example.c: example.pcproc example.pc.PHONY: clean
clean:del example.o example.c example.exe

 这里面的example是代码文件名可以按自己的文件名更改。

(4)DOS窗口执行指令进行编译

在该文件夹路径下输入cmd回车(下面的文件还没生成,图片中的其余是我之前做好的)

(5)在Dos窗口输入:

mingw32-make

(6)双击生成的exe文件就可以执行了

结果:

 下面就可以做题了。

五、做题

第 1 题:

 第 2 题:

 原来的.pc文件代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
#include <sqlcpr.h> void sql_error();//异常处理函数int main()
{  exec sql include sqlca;exec sql begin declare section;char user_name[20];char  user_pwd[20]; char db_name[20]; char  ip[20]; char port[20]; char url[100];   int i;char s_no[6];char s_name[10];char s_sex[4];int s_age; int var_age;  exec sql end declare section;/**输入登陆信息如下所示 */exec sql whenever SQLERROR do sql_error(); //异常处理printf("\n\n\b 欢迎登录学生年龄查询功能\n\n");printf("\b\b IP地址:"); gets(ip);printf("\b\b Port号:");gets(port);  printf("\b\b 数据库服务器名称:");gets(db_name); printf("\b\b 用户名:"); gets(user_name);printf("\b\b 密码:");gets(user_pwd);  strcpy(url,ip);strcat(url,":");strcat(url,port);strcat(url,"/");strcat(url,db_name);  exec sql connect :user_nameidentified by :user_pwd using :url;   printf("\n\n 用户:%s 密码:%s,哈哈,登陆成功.\n",user_name,user_pwd);  system("pause");while(1)
{  system("cls");printf("\n温馨提示:键入9999退出系统");    printf("\n输入年龄: "); scanf("%d",&var_age);if( var_age==9999) break; exec sql declare sx cursor forselect sno,sname,sex,age from s where age<:var_age; exec sql open sx;i=0;system("cls");  printf("\n\t\t学生(年龄 < %d)的基本信息表",var_age); printf("\n\t---------------------------------------------"); printf("\n\t序号\t学号\t姓名\t\t性别\t年龄"); printf("\n\t---------------------------------------------"); while(1){ exec sql fetch sx into :s_no,:s_name,:s_sex, :s_age;if(sqlca.sqlcode!=0)  break; i++;printf("\n\t %d\t%s\t%s\t%s\t%d",i,s_no,s_name,s_sex,s_age);   }printf("\n\t--------------------------------------------"); if(i!=0) printf("\n\t\t\t\t共%d人\n",i);else printf("\n\t\t\t未找到年龄为%d学生!\n",var_age);system("pause");
}system("pause");exec sql close sx;exec sql commit release;             return 0;
}void sql_error()
{printf("SQL语句错误:错误代号:%d 错误描述:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);system("pause");exit(0);
}

查询的是数据库表中的年龄小于x的学生的基本信息

 代码1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
#include <sqlcpr.h> void sql_error();//异常处理函数int main()
{  exec sql include sqlca;exec sql begin declare section;char user_name[20];char  user_pwd[20]; char db_name[20]; char  ip[20]; char port[20]; char url[100];   int i;char s_no[6];char s_name[10];char s_sex[4];char c_no[6];char c_name[10];char c_grade[4];int s_age; char var_dept[10];exec sql end declare section;/**输入登陆信息如下所示 */exec sql whenever SQLERROR do sql_error(); //异常处理printf("\n\n\b 欢迎登录各系学生信息查询功能\n\n");printf("\b\b IP地址:"); gets(ip);printf("\b\b Port号:");gets(port);printf("\b\b 数据库服务器名称:");gets(db_name);printf("\b\b 用户名:");gets(user_name);printf("\b\b 密码:");gets(user_pwd);strcpy(url,ip);strcat(url,":");strcat(url,port);strcat(url,"/");strcat(url,db_name);  exec sql connect :user_nameidentified by :user_pwd using :url;   printf("\n\n 用户:%s 密码:%s,哈哈,登陆成功.\n",user_name,user_pwd);  system("pause");while(1)
{  system("cls");printf("\n温馨提示:键入eixt退出系统");    printf("\n输入系别: "); scanf("%s",&var_dept);if( var_dept=="eixt") break; exec sql declare sx cursor forselect sno,sname,sex,age from s where dept =: var_dept; exec sql open sx;i=0;system("cls");  printf("\n\t\t%s学生信息表",var_dept); printf("\n\t---------------------------------------------"); printf("\n\t序号\t学号\t姓名\t\t性别\t年龄"); printf("\n\t---------------------------------------------"); while(1){ exec sql fetch sx into :s_no,:s_name,:s_sex, :s_age;if(sqlca.sqlcode!=0)  break; i++;printf("\n\t %d\t%s\t%s\t%s\t%d",i,s_no,s_name,s_sex,s_age);   }printf("\n\t--------------------------------------------"); system("pause");}system("pause");exec sql close sx;exec sql commit release;             return 0;
}void sql_error()
{printf("SQL语句错误:错误代号:%d 错误描述:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);system("pause");exit(0);
}

输出结果:

 

 

代码2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
#include <sqlcpr.h> void sql_error();//异常处理函数int main()
{  exec sql include sqlca;exec sql begin declare section;char user_name[20];char  user_pwd[20]; char db_name[20]; char  ip[20]; char port[20]; char url[100];   int i;char s_no[6];char s_name[10];char s_sex[4];char c_no[6];char c_name[20];float c_grade;int s_age; char var_no[10];exec sql end declare section;/**输入登陆信息如下所示 */exec sql whenever SQLERROR do sql_error(); //异常处理printf("\n\n\b 欢迎登录学生各科成绩查询系统\n\n");printf("\b\b IP地址:"); gets(ip);printf("\b\b Port号:");gets(port);printf("\b\b 数据库服务器名称:");gets(db_name);printf("\b\b 用户名:");gets(user_name);printf("\b\b 密码:");gets(user_pwd);strcpy(url,ip);strcat(url,":");strcat(url,port);strcat(url,"/");strcat(url,db_name);  exec sql connect :user_nameidentified by :user_pwd using :url;   printf("\n\n 用户:%s 密码:%s,哈哈,登陆成功.\n",user_name,user_pwd);  system("pause");while(1)
{  system("cls");printf("\n温馨提示:键入eixt退出系统");    printf("\n输入学号: "); scanf("%s",&var_no);if( var_no=="eixt") break; exec sql declare sx cursor forselect cname,gradefrom c,sc where sc.cno = c.cno  and sc.sno=:var_noand grade is not null; exec sql open sx;i=0;float sum=0;system("cls");  printf("\n\t\t%s学生信息表",var_no); printf("\n\t---------------------------------------------"); printf("\n\t序号\t课程名\t成绩\t"); printf("\n\t---------------------------------------------"); while(1){ exec sql fetch sx into :c_name,:c_grade;if(sqlca.sqlcode!=0)  break; i++; sum=sum+c_grade;printf("\n\t %d\t%s\t%.2f\t",i,c_name,c_grade);   }printf("\n\t--------------------------------------------"); printf("\n\t---------------平均分:%.2f--------------",sum/i); system("pause");}system("pause");exec sql close sx;exec sql commit release;             return 0;
}void sql_error()
{printf("SQL语句错误:错误代号:%d 错误描述:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);system("pause");//exit(0);
}

遇到的问题:

 解决办法是:

在查询条件中加入这句代码,跳过成绩空值。

and grade is not null; 

输出: 

 

 

 

六、结语:

我喜欢MySQL。

 

 

这篇关于The Last Experiment的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410845

相关文章

Linux内置的审计跟踪工具:last命令

如果你是一个服务器管理员,你或许知道你要保护你的服务器的话,不仅是从外部,还要从内部保护。Linux有一个内置工具来看到最后登陆服务器的用户,可以帮助你保护服务器。   这个命令是last。它对于追踪非常有用。让我们来看一下last可以为你做些什么。   last命令的功能是什么   last显示的是自/var/log/wtmp文件创建起所有登录(和登出)的用户。这个文件是二进制

Last Position of Target

Find the last position of a target number in a sorted array. Return -1 if target does not exist. Example Example 1: Input: nums = [1,2,2,4,5,5], target = 2Output: 2 Example 2: Input: nums = [1,

SQL进阶技巧:计算每个uid上一笔成功订单id | 近距离有效匹配问题【last_value ignore nulls实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 求:每个uid上一笔成功订单id,没有的记录为null, 状态值:1-成功 0-失败 id  time                uid   is_suc    结果列 1  2020-01-01 1    1     Null 2  2020-01-02 1    0     1 3  2020

ESP32-C3在MQTT访问时出现“Last error code reported from esp-tls: 0x8001”和问题的分析(3)

接前一篇文章:ESP32-C3在MQTT访问时出现“Last error code reported from esp-tls: 0x8001”和问题的分析(2) 上一回讲解了所遇问题log中的“esp-tls: couldn't get hostname for :iot-emqx-pre.nanshe-tech.com: getaddrinfo() returns 202, addrin

The last packet successfully received from the server was 123,051 milliseconds ago. The last packet

博客写的略水,所以提前把问题和解决问题的方式写在前面,遇到这个问题,首先分析下: 项目是不是多个数据源,事务配置是不是有问题。 查了百度,发现遇到这个问题的情况也不少,各种各样。 所以记录一下我遇到的问题和我解决的方式,望能给别人一点启发。 问题描述: 本地环境、测试服务器环境,应用启动,完全没有问题。 然后在一个镜像生产的数据库服务上启动(这个应用真是考验我的解决问题能力,也可能我的能

CSS3中nth-of-type和nth-last-of-type

1.使用nth-child和nth-last-child时会产生的问题 在使用nth-child和nth-last-child时,其计算子元素是奇数个元素还是第偶数个元素时,是连同父元素中的所有子元素一起计算的。 当父元素是列表时,列表中只可能有列表项目一种子元素,所以不会出问题,但是当父元素是div时,div包含多种子元素,会出现问题。 2.使用nth-of-type和nth-last

CSS3中first-child、last-child、nth-child、nth-last-child

1.单独指定第一个子元素、最后一个子元素的样式 <style type="text/css"> li:first-child{   background:yellow; } li:last-child{    background:blue; } </style>   2.对指定序号的子元素使用样式 <style type="text/css"> li:nty-chil

LeetCode | Length of Last Word

没啥好说 ,字符串模拟, 注意从后面去除空格就好 另外,要注意这个平台string越界(-1 或者 大于 s.size())是不会报错的,如果不加pos>=0 会出现输出奇葩的长度,故注意边界控制 class Solution {public:int lengthOfLastWord(string s) {int n=s.size(),len=0;if(n==0) return 0;int

线段树+二分,CF 431E - Chemistry Experiment

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 431E - Chemistry Experiment 二、解题报告 1、思路分析 贪心的考虑,如