當前位置:首頁 » 數據倉庫 » 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");
}