Proc编程上机报告
2021/6/6 14:50:59
本文主要是介绍Proc编程上机报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Proc编程实验
一、 实验内容
1)在数据库中创建三个表:学生S、课程C、s成绩SC。
2)使用pro*C编写程序,完成对数据库的操作,并按照相应格式输出,格式如下:
3)使用Pro*C编写程序, 完成对数据库的操作, 并按相应格式输出,格式范例如下:
二、 实验过程
1) 创建的S表:
图1:S表数据信息
创建的C表:
图2:创建的C表信息
创建的SC表:
图3:创建SC表信息
2) 使用proc编写程序:
首先使用rdbms中能够预编译该.pc文件的可执行程序。从该可执行程序预编译该 .pc文件。
也可直接在cmd中输入proc 文件名进行编译
图4:proc编写.pc文件
3)运行编译后.c文件
直接使用vs经行编译会出现报错。需要调下vs的配置参数,如下:
右键点击项目->属性->vc++目录->包含目录中添加头文件目录: oracle\product\11.1.0\client_1\precomp\public
库目录中添加.lib目录:
oracle\product\11.1.0\client_1\precomp\LIB
oracle\product\11.1.0\client_1\RDBMS\XA
oracle\product\11.1.0\client_1\oci\lib\msvc
oracle\product\11.1.0\client_1\precomp\LIB\msvc
右键点击项目->属性->配置属性->链接器->输入->附加依赖项添加.lib文件:
orasql11.lib;oraxa11.lib;oci.lib;orasqx11.lib
修该参数后,运行依然会报错,显示代码中的类和C中的类冲突,我们则需要提前预编译,预编译代码如下:
下面展示一些 内联代码片
。
#ifdef __cplusplus extern "C" { #endif int yyparse(void); void sqliem(unsigned char*, signed int*); void sqlcxt(void**, unsigned int*, struct sqlexd*, const struct sqlcxp*); //。。。各种需要的函数声明 #ifdef __cplusplus } #endif
4)修改.pc文件
void sql_error();//报错函数 void FindDept();//查找系学生信息 void FindName();//查找学生信息 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; char dept[5]; int choice; exec sql end declare section; exec sql whenever SQLERROR do sql_error(); printf("\n\n\b 欢迎登录学生年龄查询功能\n\n"); printf("\b\b IP地址:"); gets_s(ip); printf("\b\b Port号:");gets_s(port); printf("\b\b 数据库服务器名称:");gets_s(db_name); printf("\b\b 用户名:"); gets_s(user_name); printf("\b\b 密码:");gets_s(user_pwd); strcpy_s(url,ip); strcat_s(url,":"); strcat_s(url,port); strcat_s(url,"/"); strcat_s(url,db_name); exec sql connect :user_name identified by :user_pwd using :url; printf("\n\n 用户:%s 密码:%s,哈哈,登陆成功.\n",user_name,user_pwd); system("pause"); while(1) { system("cls"); cout << "请输入选项:" << endl; cout << "1.查询某系的学生" << endl; cout << "2.查询某学生的课程成绩" << endl; cout << "3.退出系统" << endl; cin >> choice; switch (choice) { case 1: FindDept(); break; case 2: FindName(); break; case 3: break; } if(choice == 3) break; } system("pause") exec sql commit release; return 0; } void FindDept() { exec sql include sqlca; exec sql begin declare section; char s_no[6]; char s_name[10]; char s_sex[4]; int s_age; char dept[5]; exec sql end declare section; int i = 0; system("cls"); cout << "请输入查找系别名称:"; cin >> dept; exec sql declare sx1 cursor for select sno, sname, sex, age from s where s.dept = :dept; exec sql open sx1; system("cls"); cout << "\n\t\t" << dept << "系的学生信息为" << endl; cout << "\n\t---------------------------------------------"; cout << "\n\t序号\t学号\t姓名\t\t性别\t年龄" << endl; cout << "\n\t---------------------------------------------"; while (1) { exec sql fetch sx1 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); } exec sql close sx1; } void FindName() { int i = 0; int sum = 0; exec sql include sqlca; exec sql begin declare section; char s_no[6]; char s_name[10]; char s_sex[4]; char c_name[10]; int grade; int s_age; char name[10]; exec sql end declare section; system("cls"); cout << "请输入查找学生的姓名:"; cin >> name; exec sql declare sx2 cursor for select c.cname, sc.grade from s, c, sc where c.cno = sc.cno and s.sno = sc.sno and s.sname = :name; exec sql open sx2; system("cls"); cout << "\n\t\t" << name << "学生信息为" << endl; cout << "\n\t---------------------------------------------"; cout << "\n\t序号\t课程号\t成绩" << endl; cout << "\n\t---------------------------------------------"; while (1) { exec sql fetch sx2 into : c_name, : grade; if (sqlca.sqlcode != 0) break; i++; sum += grade; printf("\n\t %d\t%s\t%d", i, c_name, grade); } if (i != 0) { cout << "平均成绩:" << sum / i << endl; } exec sql close sx2; } void sql_error() { printf("SQL语句错误:错误代号:%d 错误描述:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc); system("pause"); exit(0); } #endif
三、 实验结果
1) 登录用户:
图5:登录用户
2) 查询系学生信息:
3) 查询某个学生的信息:
图 7:文章学生的信息
四、 实验总结
通过上机编程,了解如何使用proc预编译.pc文件,通过网上查询学习,了解如何使用vs编译预编译后的c程序,了解处理函数冲突的处理方法。
----本问章用于记录博主数据库学习,转载请注明来处!
这篇关于Proc编程上机报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升