Ⅰ 如何用VC做個簡單小程序(詳見問題)
您好!
雖然有點多,但對您總是有好處的,看得越多,好處也越多。呵呵
C++語言相對於c語言來說引帶行入了兩個大的新東西,一個就是面向對象(具體來將就是類
),另外就是模板技術(模板編程或者叫泛型編程是進來非常流行的技術,在C#中雖然還
沒有對泛型編程的支持,但是相信在將來也一定會加入這一功能),模板是C++中比較復
雜的部分,但是作為一個真正的C++程序員,這部分很重要。尤其是對C++標准程序庫
的掌握尤為重要。
剛開始的時候千萬不要直撲VC中的各種向導和設計器。因為依賴開發環境生成的很多代碼
會把我們搞糊塗,也不利於我們學習C++語言本身。我的建議就是生成一個空的控制台工
程,然後自己向裡面添加文件。
如下就是一個簡單的控制台程序:
//robindy/list.cpp
#i nclude
#i nclude
using namespace std;
int main()
{
list coll;
for(char c = 'a'; c <= 'z'; ++c)
{
coll.push_back(c);
}
list::const_iterator pos;
for(pos = coll.begin(); pos != coll.end(); ++pos)
{
cout << *pos << ' ';
}
cout << endl;
return 0;
}
對using namespace std;的解釋:
所謂namespace,是指標識符的各種可見范圍。C++標准程序庫中的所有標識符都被定義於一個名為std的namespace中。
由於namespace的概念,使用C++標准程序庫的任何標識符時,可以有三種選擇:
1、直接指定標識符。例如std::ostream而不是ostream。完整語句如下:
std::cout << std::hex << 3.4 << std::endl;
2、使用using關鍵字。
using std::cout;
using std::endl;
以上程序可以寫成
cout << std::hex <<3.4 << endl;
3、最方便的就是使用using namespace std;這樣命名空間std內定義的所有標識符都有效(曝光)。就好像它們被聲明為全局變數一樣。那麼以上語句可以如下寫:
cout << hex << 3.4 << endl;
這段程序用到了標准模板庫,在屏幕上列印字元a~z,其中main函數的標記式只有兩種是被
C++標准委員會接受的,只有以下兩種寫法是符合C++標準的,是可移植的。即:
int main()
{
}
和
int main(int argc, char* argv[])
{
}
C++在main()的末尾定義了一個隱式的return 0; 但是在VC中必須顯式的寫出return語句。
在BCB中可以不寫return而編譯通過。
這段程序中用到了STL中的容器:鏈表。先是向鏈表中插入26個字母,然後從遍歷鏈表,輸
出字元。
我不建議初學者一開始就從模板庫入手,但是我建議應該逐漸地有意識地學習模板庫。如
我們應該熟悉cout和cin的用法(位於iostream),而減少使用老式的C函數庫中printf和sc
anf等。
從控制台入手的好處就是避免我們理解VC中向導等工具生成的其他代碼,整個程序的流程
很清楚橡行薯。新手學習VC的一大難點就是搞不清楚整個程序的流程(從那條語句開始執行,然後
從那條語句退出。MFC做了太多封裝,掩蓋了事實的真相,^_^)。通過控制台我們可以很快
地學習C++語言中的很多新特性。如類的封裝、繼承和多態等。通過這個時期的學習,要
能夠掌握三個東西: C++關鍵字、語法(重點是和面向對象有關的,以及模板)、C++
標准程序庫(知道怎麼使用即可,要徹底掌握需要很多時間和精力)。至於與界面有關的
東東(MFC中很大一部分是與界面相關的類,所以我認為MFC很臃腫而無聊!回頭看過以前
用MFC寫的程序,有一種「垃圾」的感覺。)
自己做個測試:
寫一個控制台程序,在其中體現出類的繼承,函數重載,動態多態(通過虛函數實現),
數據封裝,C++標准庫的運用。
如果你能夠輕松搞定,恭喜你,你已經通梁者過C++語言關了。不過C++實在是一個復雜的
東東,其中有各種千奇百怪的語法現象,如果沒有三、五年的功力,千萬不要說自己懂C+
+。^_^。
推薦書籍《Thinking in C++》(有精力的話,可以直接讀原版)
《Essential C++》
本來我計劃繼續說說如何來進入C++世界的,但是琢磨了一下,覺得還是要先解決一個問
題:為什麼要學習C++?我覺得在軟體開發這個行當了里除了為了生計外,學習新東西都
是應該以興趣為導向的。所以撇開我個人對C++的偏愛,我想為你樹立起學習C++的信
心和興趣。當初我對自己學習C++的第一個忠告就是:不能半途而廢!起初是興趣驅動,
後來則是生計所需,最後還是回歸到了興趣。畢竟我從中得到了樂趣,這就足夠了。在學
一個新東西前,解決動機問題很重要。就如同殺人一樣,如果只是突然興起,那麼等嘗試
了以後,是沒有成就感的。革命先烈們為我們作出了很好的榜樣,就算我們在學習C++的
道路上遇到了太多困惑和痛苦,但是我們畢竟為自己的信念做了努力,我們知道自己在
做什麼,知道自己在追求什麼。
C++適合做什麼樣的開發?
C++是一門廣泛用於工業軟體研發的大型語言。具有很高的復雜性和解決問題的能力。C
++不僅在開發上極具價值,同時在學術界也就有很高的價值。有關C++的文章應該可以
用浩如煙海來形容了吧。C++的世界級經典書籍也是數不勝數。然而,目前開發語言是如
此地繁榮,就連微軟也在推出了新的開發語言C#。一個不可否認的現實是,在低階程序設
計領域,C++擠壓著C同時也在承受著C的強烈反彈,前段時間看了據說是微軟操作系統源代
碼的東東,其中很多還是C語言。而在高階程序設計領域,Java和C#正在不斷蠶食著C++的
地盤。也許Java和C#的狂潮終將迫使C++回歸本位— 回到它有著根本性優勢的開發領域:
低級系統程序設計、高級大規模高性能應用設計、嵌入式程序設計、通用程序設計以及數
值科學計算等。果真如此,我認為這未嘗不是一件好事。電力系統軟體所要求的高性能和
大規模數值計算正是C++所擅長的。就我所接觸的南瑞和魯能,很多涉及到電力系統計算
的軟體如PAS等,都是用C++來開發的。在電力系統軟體開發這塊陣地,C++大有用武之
地。C++吸引如此之多的智力投入,以至於這個領域的優秀作品,包括重量級的軟體產品、
程序庫以及書籍等,數不勝數。在C++之父Bjarne Stroustrup的個人主頁上,有一頁
列出了一些(全部或大部分)使用C++編寫的系統、應用程序和庫。
下面是一些例子(摘自榮耀網站):
o Adobe Systems:所有主要應用程序都使用C++開發而成,比如Photoshop & ImageReady
、Illustrator和Acrobat等。
o Maya:知道「蜘蛛人」、「指環王」的電腦特技是使用什麼軟體做出來的嗎?沒錯,就
是Maya。
o Amazon.com:使用C++開發大型電子商務軟體。
o Apple:部分重要「零件」採用C++編寫而成。
o AT&T:美國最大的電訊技術提供商,主要產品採用C++開發。
o Google:Web搜索引擎採用C++編寫。
o IBM:OS/400。
o Microsoft:以下產品主要採用C++(Visual C++)編寫:
o Windows XP Windows NT:NT4、2000 Windows 9x:95、98、Me Microsoft Office:Wo
rd、Excel、Access、PowerPoint、Outlook Internet Explorer,包括Outlook Express
Visual Studio:Visual C++、Visual Basic、Visual FoxPro .NET Framework類庫採用C
#編寫,但C#編譯器自身則使用C++編寫而成。Exchange SQL Server FrontPage Project
所有游戲......
o KDE:K Desktop Environment(Linux)。
o Symbian OS:最流行的蜂窩電話OS之一。
C++源於C語言,還記得很久以前學習C語言的時光(那是一段快樂而充實的時光),可是
現在學習C++,並不是在C的基礎上加上了類而已,如果這樣認為,我們是耍不好C++的
。因此,C++絕不是C的升級或擴充,我們應該把C++當作一門新語言來學習(C++之
父Bjarne Stroustrup語)。
寫程序首先希望是程序能正確執行,其次是效率能夠被接受,再次就是易於維護。C++是
一個難學易用的語言。C++提供了太多可選擇的東西,而且使用使用C++來寫程序可以
有四種思考模式:基於過程、基於對象、面向對象和泛型。我們使用一種語言來寫程序,
並不意味著就是使用語言本身,換句話說,我們更多的時候是使用程序庫在寫程序。比如
MFC、STL、ATL、VCL等等。其中要使用C++來寫出結構優美、性能卓越、代碼簡潔、易於
維護的代碼,首推C++標准程序庫。STL對效率做了嚴格的要求,而且使用STL寫出來的程
序簡潔美觀(前段時間我特意貼了一個要求對若干整數進行排序的帖子,其實目的就是用來
展示STL的簡潔優雅)。一旦習慣使用泛型思維來考慮問題,我們能夠充分體會到模板帶來的美!
對於數值計算來說,C++標准程序庫可以充分滿足現代化服務和商業計算對數據、信息的即
時回應的要求。
我覺得學好一門語言最重要的就是實踐。也就是多「寫」!「工程經驗之積累」對已具有
一段開發時間的程序員而言,非常重要!只有在不斷的積累中,我們才能漸漸體會到C++
語言中的一些背後的東西。對於這點,沒有大量程序代碼寫作經驗的菜鳥,也可以藉助《
Effective C++》先攢一些經驗值。《Effective C++》是一本好書!。Meyers的書絕對值
得一讀,Meyers可以說當今C++社群中數一數二的技術專家。
推薦網站:
www.royaloo.com
以下文字應該是去年所塗鴉而成,主要是關於動態內存分配的,在這里將其重新看了看
,覺得還是寫得太淺薄了。因為內存是程序運行的「運動場」,對場地的了解程度會直接
影響到我們程序運行的流暢度和穩定性。
C++提供了操作符new來在堆上分配內存,操作符delete來釋放內存。有些情況下,我
們需要對內存的分配和釋放進行更好的控制。許多程序創建和釋放一些重要類的大量的對
象,如tree nodes,linked lists links,points,lines,messages,etc.使用通用的內存分
配器如new和delete來進行這些對象的分配和釋放有時將支配程序的運行時間和內存需求。
兩方面的因素:通用內存分配操作的運行和空間的耗費以及不同對象大小引起的內存碎片
。類使用定製的內存分配器將加快模擬器、編譯器和類似程序的執行速度。
例外一種需要更好的內存控制的情況是:需要在有限資源的情況下長時間不間斷運行
的程序。實時系統經常需要用最少的耗費來獲取有保證的可預期的內存。這也就導致了更
好的內存控制的需要。一般來說,這些程序都避免使用動態的內存分配,而使用特殊目的
的內存分配器來管理有限資源。
此外,還有一些情況下由於硬體或系統的要求,需要將對象放在指定的內存位置。這也
需要進行定製的內存管理(通過重載new來加以實現)。
在C++ Release 2.0中,為了滿足以上需求,內存管理機製做了相應的修改。主要是引
進了operator new [] 和 operator delete []。
new操作符的作用范圍(Scope for operator new Functions)
操作符(Operator) 范圍(Scope)
::operator new Global
class-name::operator new Class
operator new的第一個參數必須是類型size_t(在STDDEF.H中定義的類型),返回類型
為void *。
當分配內建(built-in)類型的對象、未包含用戶自定義的new操作符函數的類對象、任何
類型的數組時,使用全局new操作符函數。當在類中自定義new操作符時,分配該類對象的
內存時,調用該類的new操作符。如下:
#i nclude
#i nclude
class Blanks
{
public:
Blanks(){}
void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
void *pvTemp = malloc( stAllocateBlock );
if( pvTemp != 0 )
memset( pvTemp, chInit, stAllocateBlock );
return pvTemp;
}
int main()
{
Blanks *a5 = new( 0xa5 ) Blanks;//創建對象Blanks,並且初試化為0xa5
return a5 != 0;
}
new操作符可以重載,而delete卻不行。因為等到需要釋放的時候,我們所能得到的就
是一個指針。而且該指針可能不是原先的對象類型指針(有可能進行了類型轉換)。實際
上,當使用new獲得一個指向一片內存的指針時,在該片內存前有一個指示器(indicator)
,記錄實際分配的內存數量。當調用delete時,可以獲知需要釋放的內存大小。
數組的釋放(Deallocating Arrays):
void f( )
{
X* p1 = new X[10];
//...
delete [] X;
}
為什麼不使用delete [10] X;來釋放內存?Bjarne Stroustrup稱這種做法容易導致錯
誤,而將記錄元素個數的任務放在delete的實現中了。
至於為什麼C++中未內建垃圾收集器(Garbage Collection)的原因,看《C++語言的設
計和演化》(En) Bjarne Stroustrup 機械工業出版社(俗稱:D&E)可以得到答案。
此外,C++標准庫中提供了一種智能型指針auto_ptr,這種指針可以幫助我們防止「被
異常拋出時發生資源泄漏」。但是缺點是該智能型指針不能指向數組,因為其內部釋放內
存是通過delete而非delete [] 來進行的。所以,只能使用其來指向一個單個對象。
模板部分是C++中比較難的部分,也是C++的魅力所在。以下文字是我以前看過的,具
體出處不清楚了。今天稍微整理了一下,作為模板介紹的一個單元。
為什麼要使用模板
對於除類型之外,其餘都相同的函數(譬如quicksort),我們一般有3種解決辦法。
1、針對每個不同的類型重復地編寫函數實體(C語言的做法):
int* quicksort(int a[]) {... }
double* quicksort(double a[]) {... }
…
2、使用Object(Java的做法)或者void*
缺點有兩個
效率問題方面也有問題
類型檢查問題
3、使用宏預處理機制
缺點:只是愚蠢的文本替換,而且也不會考慮作用域和類型安全。
然而,應用模板卻可以避免這些缺點,我們可以編寫:
template
T* quicksort(T a[]) {... }
優點:
代碼簡潔優雅,所有參數類型都以T來代替,真正實現了類型無關性。
更好的類型安全性,所有的類型檢查都是在編譯期進行,而且避免使
用指針。
不存在繼承,效率高。(1)沒有虛函數;(2)所有的一切工作都是
在編譯期完成,大大提高運行效率。
目的:告訴編譯器如何做出最佳的選擇,而且這種選擇
全部是在編譯期完成的。
模板的機制:特化 和 實參演繹
1、特化
基本模板:
template
class A { // (1)
void f(T1 a, T2 b);
}
局部特化(偏特化):
template class A { // (2)
void f(int a, T2 b);
}
或者
template> class A { // (3)
void f(T a, T b);
}
全局特化(顯式特化):
template<>
class A {
void f(int a, int b); // (4)
}
使用示例:
A* p1; //將使用(4) ——全局特化
A* p2; //將使用(3) ——局部特化
A* p3; //將使用(2) ——局部特化
A* p4; //將由(1) ——基本模板——生成
//A
優點:
由:全局特化->局部特化->基本模板,這種特化順序的選擇與匹配(重載解析規則)是由編譯器自動進行的,無需人工參與。
可以根據不同的情況(諸如類型不同,條件不同),給出不同的實現,從而獲得更加靈活的針對性。
可以針對任何變化,改善了程序的擴展性。
2 實參演繹
T const& f(T const& a, T const& b)
{
return a + b; //1處
}
int g = f(1,2);
實際上f(1,2)要匹配的函數是int const& f(int const&,int const&);
而這個函數又是怎麼來的呢?
優點:
再也無需提供一對尖括弧和裡面的實參,諸如f(1,2),有了
實參演繹,我們就可以寫成f(1,2)。
模板的應用
1、標准庫(STL)——到處都是模板代碼
標准庫=演算法+容器+迭代器
如list /
2、類型無關性(T)
3、trait和policy
(1)trait: 主要用到了許多typedef和特化,指定的是一種特性。
// traits/accumtraits3.hpp
template
lass AccumulationTraits;
c template<>
class AccumulationTraits {
public:
typedef int AccT;
static AccT const zero = 0;
};
template<>
class AccumulationTraits {
public:
typedef int AccT;
static AccT const zero = 0;
};
template<>
class AccumulationTraits {
public:
typedef long AccT;
static AccT const zero = 0;
};
(2)policy:通常表現為某個函數,指定的是一種行為
class SumPolicy {
public:
template
static void accumulate (T1& total, T2 const & value) {
total += value;
}
};
(3)trait和policy的用法:
template>
class Accum {
public:
typedef typename Traits::AccT AccT;
static AccT accum (T const* beg, T const* end) {
AccT total = Traits::zero();
while (beg != end) {
Policy::accumulate(total, *beg);
++beg;
}
return total;
}
};
4、Metaprogramming
編譯期計算、遞歸的思想
5、新形式的設計模板
(第三、第四、第五點以後再詳細介紹)
《C++ Templates中文版》的具體介紹
第1部分介紹了模板的基本概念,以教程的風格來介紹這些基本概念。
第2部分闡述了模板的語言細節,可以作為一本基於模板的構造的參考手冊。
第3部分介紹了C++模板所支持的基本設計技術,范圍覆蓋從微小的概念一直延伸到復雜的用法;一些技術在別的書籍都沒有出現過。
第4部分基於前兩部分,深入討論了各種使用模板的普通應用程序。
Ⅱ 編寫C語言程序實現對產品信息管理
(1)
#include <stdio.h>
struct chanp
{
int chan_ID;
char chan_Name[20];
float chan_Price;
};
struct chanp chanp1[3] = {{1001,"Asdf",100.2},{1002,"Bsdf",123.3},{1003,"Cfd",3313.0}};
void main()
{
struct chanp* p;
printf("Information: 產品編號 產品名稱 產品價格\n");
for(p=chanp1;p<chanp1+3;p++)
{
printf("%d%10s%15.2f\n",p->chan_ID,p->chan_Name,p->chan_Price);
}
}
(2)
#include <stdio.h>
#include <string.h>
struct chanp
{
int chan_ID;
char chan_Name[20];
float chan_Price;
};
void main()
{
struct chanp chan1[3];
struct chanp* p;
int id,findid;
int n=0;
char name[20];
float price;
for(int i =0;i<3;i++)
{
printf("Input: 產品編號 產品名稱 產品價格\n"); scanf("%d%s%f",&id,name,&price);
chan1[i].chan_ID = id;
strcpy(chan1[i].chan_Name,name);
chan1[i].chan_Price = price;
}
printf("請輸入ID:\n");
scanf("%d",&id);
for (p=chan1;p<chan1+3;p++)
{
if (id == p->chan_ID)
{
printf("該產品存在\n");
printf("Information: 產品編號 產品名稱 產品價格\n"); �n");
printf("%d%10s%15.2f\n",p->chan_ID,p->chan_Name,p->chan_Price);
n++;
}
}
if (n == 0)
{
printf("該產品不存在\n");
}
}
(3)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct chanp
{
int chan_ID;
char chan_Name[20];
float chan_Price;
};
void main()
{
struct chanp chan1[3];
struct chanp* p;
int id,findid;
char ch[10];
int n=0;
char name[20];
float price;
for(int i =0;i<3;i++)
{
printf("input: 產品編號 產品名稱 產品價格�n");
scanf("%d%s%f",&id,name,&price);
chan1[i].chan_ID = id;
strcpy(chan1[i].chan_Name,name);
chan1[i].chan_Price = price;
}
printf("請輸入查詢產品的ID\n");
scanf("%d",&id);
for (p=chan1;p<chan1+3;p++)
{
if (id == p->chan_ID)
{
printf("產品存在。\n");
printf("需要修改產品信息請按Y或者y,否則請按任意鍵。\n");
scanf("%s",ch);
if (!strcmp(ch,"Y") || !strcmp(ch,"y"))
{
printf(" 請輸入:產品名稱 產品價格\n");
scanf("%s%f",name,&price);
strcpy(p->chan_Name,name);
p->chan_Price = price;
printf("Information: 產品編號 產品名稱 產品價格\n"); �n");
printf("%d%10s%15.2f\n",p->chan_ID,p->chan_Name,p->chan_Price);
}
n++;
}
}
if (n == 0)
{
printf("該產品不存在。\n");
}
}
終於結束了
Ⅲ 電子產品開發C語言程序設計
當然是電子產品的硬體基礎,單片機基礎知識了。
比如你得知道P0 ,P1,P2,P3口的工作方式。是地址線,還是數據線。還有RAM,以及RAM在片內的具體分配,每個散毀位元組沖碧備都讓誰用了。一些特殊功慧坦能寄存器:TCON SCON TMOD IP IE 等比較重要的幾個。
西安電子大學出版社,出版的一本書,非常好,名字不記了,好像叫單片機什麼來著。
祝你成功!
Ⅳ 用C語言設計產品只能計算器,向大神們求助!!!
scanf()函數中沒有精度控制。
如胡銷: scanf("%5.2f",&a); 是非法的。不能企圖用此語句純備輸入小數為褲褲游2位的實數。
Ⅳ 如何編寫C語言程序
准備材料
windows電腦、VC++(DEV_C++)
1.打開桌面上的DEV_C++,進入如下界面:
Ⅵ 使用TM4C123GH6PZ開發產品用C語言和ARM匯編語言怎麼做
對於SPI的時序來說,主要的配置就祥型在是時鍾頻率、字長、時鍾的極性和采樣的邊沿。這個在SPI設備(ADS8371)中會有明確的描述。M4的SPI按照這個去配置就好。
例如,
SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 16);
SSI_FRF_MOTO_MODE_0是時鍾極性和采樣邊沿,2000000是頻率,16是字長。
接下來就是ADS8371的內粗搏部寄存器和配置了,這個按照它的Datasheet去做就謹凳猜行了。
Ⅶ C語言做個小型商品銷售管理系統
我這里有一個!
具體的,稍微改一下就可以了!
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
struct score
{
int mingci;
char xuehao[8];
char mingzi[20];
float score[6];
}data,info[1000];
int i,j,k=0;
char temp[20],ch;
FILE *fp,*fp1;
void shuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPlease shuru xuehao:");
gets(data.xuehao);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please shuru wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please shur huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
fwrite(&data,sizeof(data),1,fp);
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
} fclose(fp);
}
void xianshi()
{
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL)
{
printf("Cannot reading this file.\n");
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!=1)
break;
}
printf("\nxuehao mingzi yuwen shuxue yingyu wuli huauxue zhongfen\n");
for(j=0,k=1;j<i;j++,k++)
{
info[j].mingci=k;
printf("%6s %8s %3.1f %3.1f %3.1f %3.1f %3.1f %3.1f\n",info[j].xuehao,info[j].mingzi,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3],info[j].score[4],
info[j].score[5]);
}
getch();
fclose(fp);
}
void xiugai()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("Cannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xiugai xuehao:");
scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("xuehao:%s\nmingzi:%s\n",data.xuehao,data.mingzi);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please input wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please input huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
} fwrite(&data,sizeof(data),1,fp1);
}
fseek(fp,0L,0);
fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1)
{
fwrite(&data,sizeof(data),1,fp);
}
fclose(fp);
fclose(fp1);
}
void chazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xuehao chakan:");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:%s mingzi:%s\nyuwen:%f\n shuxue:%f\n yingyu:%f\n wuli:%f\n huaxue:%f\n ",data.xuehao,data.mingzi,data.score[0],data.score[1],data.score[2],data.score[3],data.score[4],data.score[5]);
}getch();
}
}
void shanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopen score.txt was failed!");
getch();
exit(0);
}
printf("\nPlease input ID which you want to del:");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("Anykey will delet it.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n");
printf("Anykey will return to main.");
getch();
}
main()
{
while(1)
{
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
window(1,1,99,99); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr();
printf("*************welcome to use student manage******************\n");
printf("*************************menu********************************\n");
printf("* ========================================================= * \n");
printf("* 1>shuru 2>xiugai * \n");
printf("* 3>shanchu 4>chazhao * \n");
printf("* 5>xianshi 6>exit * \n");
printf("* * \n");
printf("* --------------------------------------------------------- * \n");
printf(" Please input which you want(1-6):");
ch=getch();
switch(ch)
{
case '1':shuru();break;
case '2':xiugai(); break;
case '3':shanchu(); break;
case '4':chazhao(); break;
case '5':xianshi(); break;
case '6':exit(0);
default: continue;
}
}
}
Ⅷ C語言怎麼做項目
和所有的項目開發一樣,首先進行可行性分析,然後進行需求分析,完成之後進行概要設計,這些工作都和使用的語言無關;再往後,就要給出詳細設計,此時開始和開發語言開始建立聯系啦,調試,完成後發布。
所以說,項目和語言開發工具有一定的聯系,這種聯系這發生在軟體的開發過程中。
Ⅸ 請問,用vc6.0做編程平台,用c語言如何開發軟體
通常來講,你可以使用一個集成開發環境,現在有很多,如VC和TC等等
新建一個文件,輸入代碼,編譯通過,鏈接程序中所調用的庫函數的頭文件
最局坦終生成一個擴展名為exe的可執行文件
這只能說是一個可執行程序
一般來講,如果是你說的「軟體」的話,應滑臘迅該信此有些實用的功能,通常不是一個文件,這樣,你可以把用以實現不同功能的代碼分別輸入到不同的文件中,分別編譯通過後把它們鏈接到一起,生成一個exe,這時候就算是做出了一個你所說的軟體了
如果是想要做windows平台下的軟體的話,你可以在有了C語言的基礎之後學習一下windows程序設計,也就是了解一下windows平台的API,所謂API也是一些已經編好的函數,就如同C語言的標准庫函數的道理是一樣的
有些功能你通過調用這些API可以很輕松的完成
如果不是從事比較深的研究的話,你不必了解這些API內部如何實現,你只需要了解它的功能和用法就行了
形象點說,做一個小軟體的話,就像是拼裝一台電腦,顯卡,硬碟,內存等等一些部件就是現成的函數,你只需要掌握基本語法,也就是拼裝方法,把它們有序的拼裝起來就是產品了
當然了,如果你要以後走程序這條路,進行深入的研究的話,就不止這么簡單了,那時候你可以學習一些專業的理論知識,如操作系統,編譯原理,數據結構什麼的
那是後話了
Ⅹ 怎麼用C語言做項目
所謂項目,在一定的時間內,利用有限的資源和時間,完成特定的目的,這就是項目。
Turbo C 是一種工具,它有它擅長的地方,也有它不擅長的地方
我98年接過一個項目,用TC開發,結果失敗,前前後後寫了10000多行代碼,只完成了一個圖形化界面的部分,當時Win 95已經出來了,我寫了一個學期的東西,人家用VB一下午就出來了。
但是我也知道TC是完全可以做項目的,我畢業後找工作,一家軟體公司差點就要我了,他們就是用TC做項目的,寫驅動程序,TC+匯編
寫了這么多,不知你看明白了沒有,TC能不能做項目,答案是肯定的。至於你要代碼,我只能說,要到的可能性不大。因為項目的特性之一就是獨特性,每一個項目都有它自己的特點,別人的代碼給你也用不上,最多隻是起個學習作用。但是對於別人來說,那是職業道德問題,哪個公司的源代碼也不會允許拿給外人的。