当前位置:首页 » 数据仓库 » c实现数据库增删改查
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c实现数据库增删改查

发布时间: 2023-02-18 22:32:47

c语言编辑查询系统,可实现增删改查

if((fp=fopen("E:\\a.dat","wb"))==NULL) 当打开E:\\a.dat时为空,则输出Open Error

⑵ 用c语言实现对学生信息增删改,怎么做啊

要更详细答案,联系我,这个很难做的,起码要给点悬赏分作为酬劳啊!!!
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//数据结构的定义
typedef struct node{
int id; //学号
char name[10]; // 姓名
int grade; //成绩
struct node * next; //指向下一节点的指针
}node,*list;

//函数的声明,必须按照声明来定义函数
void showMenu(); //显示菜单
void start(); // 主控程序
void init(list &h);// 初始化链表h
void printAnRecord(node * p);//输出p所指节点的值(id,name,grade)
void printList(list h);// 输出链表h的各节点的值
int del(list h,int n);//删除链表h中id为n的节点,成功删除返回1,若不存在则返回0
int insert(list h,int id,char * name,int grade);//在链表h中,插入节点(n,name,grade),若id重复返回0,否则返回1
node * searchByID(list h, int n);// 在链表h中查找id为n的节点,查找成功返回其指针,否则返回NULL
int update(list h,int n,int grade);// 将链表h中id为n的节点的成绩改为grade,若不存在该节点返回0,否则返回1
float average(list h); //返回链表h中各个节点成绩的平均值
int bulkInsert(list h);//在链表h中批量插入节点,以id=0结束,返回成功插入的节点数
void clearList(list h);//清空链表h(使其成为空链表)

void showMenu()
{ //显示菜单
puts(" 0----Bulk Insert ");
puts(" 1----Insert an Record");
puts(" 2----Delete an Record");
puts(" 3----Update an Record's grade");
puts(" 4--- Search an Record by stu_id");
puts(" 5----Print all Record");
puts(" 6----Average of grade");
puts(" 7----Clear list");
puts(" 9----Exit");

}

//主控程序
void start()
{
list h; //链表
int choice; //功能选择
int id,grade,flag=1,m;
char name[10];

showMenu();
init(h); //初始化链表h,即建立空链表

while(flag){//若未退出程序
puts(" ******** Please input 1...9 ********* ");
scanf("%d",&choice);

switch(choice){ //根据选择的功能号,执行不同的操作
case 0 :
puts("input Stu_ID, Name , Grade (end by 0)");
m=bulkInsert(h);
printf(" %d Record insert successfully\n",m);
break;
case 1:
puts("input Stu_ID, Name , Grade: ");
scanf("%d",&id);
scanf("%s",name);
scanf("%d",&grade);
if( insert(h,id,name,grade) )
puts("Insert an Record successfully!");
else
puts("Sorry, blicate ID ");
break;
case 2:
puts("input Stu_ID to delet");
scanf("%d",&id);
if( del(h,id) )
puts("Delete an Record successfully");
else
puts("Sorry, ID no exit ");
break;
case 3:
puts("input Stu_ID and grade to update");
scanf("%d",&id);
scanf("%d",&grade);
if ( update(h,id,grade) )
puts("Update an Record successfully ");
else
puts("Sorry, ID no exit ");
break;
case 4:
puts("input Stu_ID to search");
scanf("%d",&id);
node *p;
if( p=searchByID(h,id) )
printAnRecord(p);
else
puts("Sorry, ID no exit ");
break;
case 5:
printList(h);
break;
case 6:
printf("The average grade is %6.2f \n ", average(h) );
break;
case 7:
clearList(h);
break;
case 9:
flag=0; //退出循环
break;

default:
puts(" Error ! Must Input (1...9) ");

}
}
}

void main()
{
//编程时要一个一个函数的调试完成后,最后再调用主控程序
start();

}

⑶ 新手求教,B/S模式,用C#实现对sql的连接并实现增删改查,求代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace NewClient
{
class DBHelper
{
static string str = "data source=.;initial catalog=你的数据库名;integrated security=true";
public SqlConnection con = new SqlConnection(str);

/// <summary>
/// 查询单个值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public object Scalar(string sql)
{
object o = null;
try
{

con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
o = cmd.ExecuteScalar();
}
catch (Exception)
{

throw;
}
finally
{
con.Close();
}
return o;

}
/// <summary>
/// 查询多个值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public SqlDataReader Reader(string sql)
{
SqlDataReader o = null;
try
{

con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
o = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception)
{

throw;
}
return o;

}
/// <summary>
/// 增删改
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int NonQuery(string sql)
{
int o = -1;
try
{

con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
o = cmd.ExecuteNonQuery();
}
catch (Exception)
{

throw;
}
finally
{
con.Close();
}
return o;

}
}
}

⑷ 谁知道用c语言向数据库做增删改查吗

我曾经写过C语言的
数据库系统
..
给你部分代码(一个销售函数)以作参考...
void
book_out()
//销售函数
{
char
temp;
EXEC
SQL
BEGIN
DECLARE
SECTION;
/*主变量定义开始.*/
int
Hout_shuliang;
int
Hshuliang;///////////
char
Hbook_id[11];
EXEC
SQL
END
DECLARE
SECTION;
/*主变量定义结束*/
lab3:
printf("请输入图书编号:");
scanf("%s",&Hbook_id);
printf("请输入卖出本数:");
scanf("%d",&Hout_shuliang);
//先将
库存量
取出到主变量
EXEC
SQL
select
book_shuliang
into
:Hshuliang
from
book_kucun
where
book_id=:Hbook_id;
if(Hshuliang<Hout_shuliang)
//假如库存不足,销售不成功.
{
printf("输入有误.没那么多库存,请重新输入.\n");
goto
lab3;
}
//将销售记录插入到book_out(销售表)数据表.
EXEC
SQL
insert
into
book_out
values(:Hbook_id,:Hout_shuliang,GETDATE());
EXEC
SQL
COMMIT
TRANSACTION
;
/*事务提交*/
printf("售出成功,输入Y继续输入其他要售出的书.其他键返回
主菜单
:");
getchar();//////////////////////////
scanf("%c",&temp);
if(temp=='y'||temp=='Y')
goto
lab3;
}

⑸ c 语言对链表中文件的操作,实现增删查改,增删查改后都要存入文件,如何破

1、删除文件部分内容的大概步骤:新建一个临时文件,把原文件内容向临时文件里拷贝,遇到要删除的内容就跳过。结束后关闭文件,用remove("原文件名");把原文件删除,用rename("临时文件名","原文件名");把临时文件名改为原文件名。

2、例如在原文件123.txt中删除以2和以4编号开头的行,可用以下代码实现:
#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp;
char a[1000];
fin=fopen("123.txt","r");//读打开原文件123.txt
ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
while(fgets(a,1000,fin))//从原文件读取一行
if(a[0]!='2' && a[0]!='4')//检验是要删除的行吗?
fputs(a,ftp);//不是则将这一行写入临时文件tmp.txt
fclose(fin);
fclose(ftp);
remove("123.txt");//删除原文件
rename("tmp.txt","123.txt");//将临时文件名改为原文件名
return 0;
}

⑹ 用C语言写一个仓库管理系统实现增加、修改、删除、添加等功能

用结构体数组就可以实现增删改查的功能

⑺ C# C/S架构,如何让多台计算机访问一台计算机上的数据库并可以对其进行增删改查的操作

一般来说呢,会搞个域名,IP可能会变(路由器重启就变,换服务器也会变),先根据域名解析出放数据库服务器的IP地址,然后将连接数据库的字符串的IP设置成这个IP地址。其他的跟局域网一样。如果你确定你放数据库服务器的IP地址不会变就不用搞域名了。
现在有提供云服务的商家,可以租用数据库,直接给个IP和端口,跟局域网一样。

⑻ c或者c++如何对sql进行增删改查等操作,数据库是sqlserver,已经成功连接

看你用的是odbc还是ado了

⑼ c#如何实现对表格(excel)的增删改查

一、首先处理好数据库连接字串

Excel2000-2003: string connStr = "Microsoft.Jet.Oledb.4.0;Data Source='c:\test.xls';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";

Excel2007: string connStr = "Microsoft.Ace.OleDb.12.0;Data Source='c:\test.xlsx';Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

其中:

HDR ( Header Row )设置:

若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称

若指定值为 No,代表 Excel 档中的工作表第一行就是资料了,没有栏位名称

IMEX ( IMport EXport mode )设置

当 IMEX=0 时为"汇出模式",这个模式开启的 Excel 档案只能用来做"写入"用途。

当 IMEX=1 时为"汇入模式",这个模式开启的 Excel 档案只能用来做"读取"用途。

当 IMEX=2 时为"连结模式",这个模式开启的 Excel 档案可同时支援"读取"与"写入"用途。

二、进行表格数据的查询、插入和更新:

(假设Excel文件text.xls中存在Excel表单tree,有2列分别为id,name)

1、查询

String sql = "select id, name from [tree$]";



String sql = "select id, name from `tree$`;

2、插入

String sql = "insert into [tree$] (id,name) values(1,'testname');

3、更新

String sql = "update [tree$] set name='name2' where id=1;

4、数据的删除

在OleDB的连接方式下,不可以使用delete from 语句来删除某表中的某一条记录。确切的说,在此模式下,将无法删除表中的记录。即使用update语句将所有的字段写成null,打开excel文件后依然会发现保留了该空行,而且在使用oleDB连接进行查询时,依然会查询到这条空数据。

⑽ c语言 建立一个链表,实现增删改查

下面是以前写的一个关于链表的综合操作,你可以看看,应该可以满足你的要求。
/********************************************************************
created: 2009/09/15
created: 16:9:2009 17:20
filename: E:\dd\lianbiao\lianbiao.cpp
author:
purpose: 一个win32 的控制台程序
实现单项链表的数据删除、插入、排序等功能
*********************************************************************/
#include <stdio.h>
#include "windows.h"
#include "malloc.h"

#define LEN sizeof(struct student)
#define NULL 0
#define N 5 //N为所要创建的链表的长度

int n = 0; //定义全局变量n,表示链表的节点个数
/*******************************************************************
Author/data: /2009/09/15
Description: 声明一个结构体作为链表的节点.
tip: student 只是一个标签,是不能声明变量的
*********************************************************************/
struct student
{
int num;
float cj;
struct student *Pnext;
};

/*******************************************************************
Author/data: /2009/09/15
Description: 创建一个动态链表
参数: 返回链表的第一个节点的地址
x 为链表的长度
*********************************************************************/
struct student *pa(int x)
{
struct student *head;
struct student *p1,*p2;

// n = 0;
p1 = p2 = (struct student *)malloc(LEN); //开辟一个结构体内存
fflush(stdin); // 清除缓冲区数据 避免直接读入缓冲区数据
scanf("%d,%f",&p1->num,&p1->cj);
head = NULL;
while(p1->Pnext != NULL)
{
n = n+1;
if(n == 1)
{
head = p1; // 链表的头地址
}
else
{
p2->Pnext = p1; //链接链表数据
}
/* 判断是否最后一个 */
if(n >= x)
{
p1->Pnext = NULL;
}
else
{
p2 = p1;
p1 = (struct student *)malloc(LEN);
fflush(stdin);
scanf("%d,%f",&p1->num,&p1->cj);
}
}
return(head);
}
/*******************************************************************
Author/data: /2009/09/15
Description: 输出一个链表
参数: head为第一个节点的地址
*********************************************************************/
void print(struct student *head)
{
struct student *p;

int i = 0;
printf("\nNow,These %d records are:\n",n);
p = head;
if(head != NULL) // 如果链表不是空的,则进行数据输出
{
do
{
printf("%d\t",i++);
printf("%5d %5.1f\n",p->num,p->cj); // 输出链表数据
p = p->Pnext;
}while(p != NULL);
}
}
/*******************************************************************
Author/data: /2009/09/16
Description: 释放动态链表的地址空间
参数: 链表的头地址head
无返回值
*********************************************************************/
void freelinkspace(struct student *head)
{
struct student Ltemp;
Ltemp.Pnext = head->Pnext; // Ltemp 用来存放->next,避免空间被
// 释放后,找不到下一个结点的地址
while(head->Pnext != NULL) // 判断是否已经空间释放到最后一个
{
free(head);
head = Ltemp.Pnext;
Ltemp.Pnext = head->Pnext;
}
free(head); // 释放最后一个结点空间
}

/*******************************************************************
Author/data: /2009/09/15
Description: 删除链表链表中的一个结点
参数: head 为第一个节点的地址
num 为要删除结点的序号(head->num)
*********************************************************************/
struct student *del(struct student *head,int num)
{
struct student *p1,*p2;
p1 = head;
while(p1->num!=num && p1->Pnext!=NULL) // 寻找要删除的结点
{
p2 = p1; // p2 存放删除结点的前一个结点地址
p1 = p1->Pnext; // p1 存放要删除的结点
}
if(num == p1->num) // 是否找到要删除结点
{
if(p1 == head) // 删除的是第一个结点
{
head = p1->Pnext;
}
else if(p1->Pnext == NULL) // 删除的是最后一个结点
{
p2->Pnext = NULL;
}
else // 删除中间的结点
{
p2->Pnext = p1->Pnext;
p1->Pnext = NULL;
}
printf("delete: %d\n",num);
n = n-1; // 链表长度 - 1
}
else
{
printf("%d not been found! \n",num);
}
delete(p1);
return(head);
}
/*******************************************************************
Author/data: /2009/09/16
Description: 添加一个结点到链表中
参数: head 为第一个结点的地址指针
stud 为要插入的结点的地址指针
*********************************************************************/
struct student *insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2;
p0 = stud;
p1 = head;
while(p0->num>p1->num && p1->Pnext!=NULL) // 找到添加结点的位置
{
p2 = p1; // p2 存放要添加的前一个结点的地址
p1 = p1->Pnext; // p1 存放要添加的后一个结点的地址
}
if(p0->num<=p1->num && p1->Pnext!=NULL)
{
if(p1 == head) // 添加结点到第一个位置
{
p0->Pnext = p1;
head = p0;
}
else
{
p2->Pnext = p0;
p0->Pnext = p1;
}
}
else // 添加结点到最后一个位置
{

p1->Pnext = p0;
p0->Pnext = NULL;
}
n = n+1; // 结点数目 + 1
return(head);
}
/*******************************************************************
Author/data: /2009/09/16
Description: 链表的重新排序===按照.num(不能重复)的大小从小到大排
列链表数据
参数: head 接收链表第一个节点的地址指针
返回值为新生成链表的第一个节点的地址指针
*********************************************************************/
struct student *linkpaix(struct student *head)
{
struct student *stemp,*ltemp,*shead,*head_h; /* */
struct student *p,*q; /* 申请两个链表指针,用来储存链表交换过
程的中间值 */
head_h = head;
ltemp = head;

p = (struct student *) malloc(LEN);
q = (struct student *) malloc(LEN); /* 为p,q开辟动态存储空间 */

/* -==== 先将链表的第一个数据与其他数据比较 ====- */
while(head->Pnext != NULL)
{
shead = head;
head = head->Pnext;
if(ltemp->num > head->num)
{
if(ltemp == shead)
{
ltemp ->Pnext = head ->Pnext;
head ->Pnext = ltemp;
}
else
{
p->Pnext = head ->Pnext;
q->Pnext = ltemp ->Pnext;
head ->Pnext = q->Pnext;
shead ->Pnext = ltemp;
ltemp ->Pnext = p->Pnext;
}
head_h = head;
head = ltemp;
ltemp = head_h;
}

}
/* -==== 先将链表的第一个数据与其他数据比较 ====- */

/* -==== 比较链表第一个以外的数据 ====- */
while(ltemp ->Pnext != NULL)
{
stemp = ltemp;
ltemp = ltemp ->Pnext;
head = ltemp;
while(head->Pnext != NULL)
{
shead = head;
head = head->Pnext;
if(ltemp->num > head->num)
{
if(ltemp == shead)
{
p->Pnext = head ->Pnext;
stemp ->Pnext = head;
head ->Pnext = ltemp;
ltemp ->Pnext = p->Pnext;
}
else
{
p->Pnext = head ->Pnext;
q->Pnext = ltemp ->Pnext;
stemp ->Pnext = head;
head ->Pnext = q->Pnext;
shead ->Pnext = ltemp;
ltemp ->Pnext = p->Pnext;
}
head = ltemp;
ltemp = stemp ->Pnext;
}
}

}
/* -==== 比较链表第一个以外的数据 ====- */

free(p);
free(q); // 释放p,q的动态存储空间
return(head_h);
}

/*******************************************************************
Author/data: /2009/09/15
Description: 主函数
参数:
*********************************************************************/
void main()
{
struct student *phead,*pins; // 定义2个链表指针
int delnum, selflog,flog_a = 1,Nf = 1; // 要删除的对象id
char delflog ; // 删除标志y/n
char insflog, flog_nx = 'n';
char flog_free ; // 释放标志
/* === 输入N个数据 === N 为定值
printf("please input %d numbers:\n",N);
phead = pa(N); // 创建一个动态链表,并赋值
print(phead); // 输出链表数据
*/

/* === 输入Nx个数据 === Nx 为输入值 === */
int Nx; // Nx 想要输入的链表长度
printf("How long do you want establish? \t");
fflush(stdin);
scanf("%d",&Nx);
/* -== 判断创建的是否是一个空链表 ==- */
while(Nx == 0)
{
printf("您要创建的是一个空链表,是否确定?y/n \t");
fflush(stdin);
scanf("%c",&flog_nx);
if(flog_nx == 'n')
{
printf("How long do you want input?\t");
fflush(stdin);
scanf("%d",&Nx);
}
else if(flog_nx == 'y') goto endl;
else
{
printf("wrong input!\n");
printf("How long do you want input?\t");
fflush(stdin);
scanf("%d",&Nx);
}
}

printf("please input %d numbers: ",Nx);
printf("如:1,3 两个数中间以,隔开\n");
phead = pa(Nx); // 创建一个动态链表,并赋值
print(phead); // 输出链表数据

/* -== 链表操作 ==- */
while(flog_a)
{
if(phead == NULL) {printf("链表已空,无法操作\n"); flog_a = 0; break;}
printf("\n操作\n1:\t插入数据\n2:\t删除数据\n3:\t排序\n4:\t清屏\n5:\t输出现在的链表数据\n0:\texit\n");
printf("\nPlease input:\t");
fflush(stdin);
if(scanf("%d",&selflog)) // select flog 选择项
switch(selflog)
{
case 1 :
/* ====== 插入数据到链表 ====== */
printf("insert someone? y/n\t");
fflush(stdin);
scanf("%c",&insflog);
while(insflog != 'n')
{
while(insflog != 'y'&& insflog != 'n')
{
printf("wrnong input,please input again. \n");
printf("another one? y/n\t");
fflush(stdin);
scanf("%c",&insflog);
}
printf("please input the date:\n");
pins = (struct student *)malloc(LEN);
fflush(stdin);
scanf("%d,%f",&pins->num,&pins->cj);
phead = insert(phead,pins);
print(phead);

printf("another one? y/n\t");
fflush(stdin);
scanf("%c",&insflog);
while(insflog != 'y'&& insflog != 'n')
{
printf("wrnong input,please input again. \n");
printf("another one? y/n\t");
fflush(stdin);
scanf("%c",&insflog);
}
}
/* ====== 插入数据到链表 ====== */
break;

case 2 :
/* ====== 删除链表中的数据 ====== */
printf("del someone? y/n\t");
fflush(stdin);
scanf("%c",&delflog);
while(delflog != 'n' && phead != NULL)
{
while(delflog != 'y'&& delflog != 'n')
{
printf("wrnong input,please input again. \n");
printf("del someone? y/n\t");
fflush(stdin);
scanf("%c",&delflog);
}
printf("please input the student what you want del:\n");
fflush(stdin);
scanf("%d",&delnum);
phead = del(phead,delnum);
print(phead);

printf("another one? y/n\t");
fflush(stdin);
scanf("%c",&delflog);
if((n+1)==0)
{
printf("There is no more num could be del!\n");
break;
}
}
/* ====== 删除链表中的数据 ====== */
break;

case 3 :
/* ====== 排列链表数据 ====== */
printf("\n排序之后:");
phead = linkpaix(phead);
print(phead); // 排序该数据链表
/* ====== 排列链表数据 ====== */
break;
case 4 :// clrscr();
system("cls");
break;

case 5 : print(phead); break;
case 0 : flog_a = 0 ; break; /* 退出 */

default : printf("wrong input\nPlease input again");
break;
}
else printf("非法输入!\n");
}
endl: while(1)
{
if(Nx == 0)
{
printf("Can't establish the link!\n");
break;
}
printf("\n保留数据?y/n\t"); // 是否释放地址空间
fflush(stdin);
scanf("%c",&flog_free);
if(flog_free == 'y')
{
break;
}
else if(flog_free == 'n')
{
freelinkspace(phead);
break;
}
else
{
printf("wrong input!\n");
}
}

printf("OVER!\nGOOD LUCK!\n");
}