c語言人機界面
1. 求用c語言實現FFT變換的程序(見下面)
你好,這是我的回答,希望可以幫到你。
1)結果討論
一,如果對信號進行同樣點數N的FFT變換,采樣頻率fs越高,則可以分析越高頻的信號;與此同時,采樣頻率越低,對於低頻信號的頻譜解析度則越好。
二,假設采樣點不在正弦信號的波峰、波谷、以及0電壓處,頻譜則會產生泄露(leakage)。
三,對於同樣的采樣率fs,提高FFT的點數N,則可提高頻譜的解析度。
四,如果采樣頻率fs小於2倍信號頻率2*fs(奈圭斯特定理),則頻譜分析結果會出錯。
五,對於(二)中泄露現象,可以通過在信號後面補零點解決。
2)程序及註解如下
%清除命令窗口及變數
clc;
clear all;
%輸入f、N、T、是否補零(補幾個零)
f=input('Input frequency of the signal: f\n');
N=input('Input number of pointsl: N\n');
T=input('Input sampling time: T\n');
flag=input('Add zero too sampling signal or not? yes=1 no=0\n');
if(flag)
ZeroNum=input('Input nmber of zeros\n');
else
ZeroNum=0;
end
%生成信號,signal是原信號。signal為采樣信號。
fs=1/T;
t=0:0.00001:T*(N+ZeroNum-1);
signal=sin(2*pi*f*t);
t2=0:T:T*(N+ZeroNum-1);
signal2=sin(2*pi*f*t2);
if (flag)
signal2=[signal2 zeros(1, ZeroNum)];
end
%畫出原信號及采樣信號。
figure;
subplot(2,1,1);
plot(t,signal);
xlabel('Time(s)');
ylabel('Amplitude(volt)');
title('Singnal');
hold on;
subplot(2,1,1);
stem(t2,signal2,'r');
axis([0 T*(N+ZeroNum) -1 1]);
%作FFT變換,計算其幅值,歸一化處理,並畫出頻譜。
Y = fft(signal2,N);
Pyy = Y.* conj(Y) ;
Pyy=(Pyy/sum(Pyy))*2;
f=0:fs/(N-1):fs/2;4
subplot(2,1,2);
bar(f,Pyy(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Amplitude');
title('Frequency compnents of signal');
axis([0 fs/2 0 ceil(max(Pyy))])
grid on;
祝你好運!
我可以幫助你,你先設置我最佳答案後,我網路Hii教你。
2. 用C語言設計一個學生信息查詢系統程序
1、首先創建一個c語言項目。然後旁汪者右鍵頭文件,創建一個Stu的頭文件。
3. 人機界面屬於哪個庫
python庫之圖形用戶界面
Python庫之游戲開發
Python庫之虛擬現實
Python庫之圖形藝術
二、Python庫之圖形用戶界面
2.1 PyQt5
提供了創建Qt5程序的Python API介面
Qt是非常成熟的跨平台桌面應用開發系統,完備GUI
推薦的Python GUI開發第三方庫
2.2 wxPython
提供了專用於Python的跨平台GUI開發框架
理解數據類型與索引的關系,操作索引即操作數據
Python最主要的數據分析功能庫,基於Numpy開發
import wx
app = wx.App(False)
frame = wx.Frame(None, wx.ID_ANY, "Hello World") frame.Show(True)
app.MainLoop()
2.3 PyGObject
提供了整合GTK+、WebKitGTK+等庫的功能
GTK+:瞎或跨平台的一種用戶圖形界面GUI框架
實例:Anaconda採用該庫構建GUI
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window(title="Hello World")
window.show()
window.connect("destroy", Gtk.main_quit)
Gtk.main()
三、Python庫之游戲開發
3.1 PyGame
提供了基於SDL的簡單游戲開發功能及實現引擎
理解游戲對外部輸入的響應機制及角色構建和交互機制
Python游戲入門最主要的第三方庫
3.2 Panda3D
Panda3D: 開源、跨平台的3D渲染和游戲開發庫,http://www.panda3d.org
一個3D游戲引擎,提供Python和C++兩種介面
支持很多先進特性:法線貼圖、光澤貼圖、卡通渲染等
由迪士尼和卡尼基梅隆大學共同開發
3.3 cocos2d
ocos2d: 構建2D游戲和圖形界面互動式應用的框架,http://python.cocos2d.org/
提供了基於OpenGL的游戲開發圖形渲染功能
支持GPU加速,採用樹形結構分層管理游戲對象類型
適用於2D專業級游戲開發
四、Python庫之虛擬現實
4.1 VR Zero
提供大量與VR開發相關的功能
針對樹莓派的VR開發庫,支持設備磨圓伍小型化,配置簡單化
非常適合初學者實踐VR開發及應用
4.2 pyovr
針對Oculus VR設備的Python開發庫
基於成熟的VR設備,提供全套文檔,工業級應用設備
Python+虛擬現實領域探索的一種思路
4.3 Vizard
專業的企業級虛擬現實開發引擎
提供詳細的官方文檔
支持多種主流的VR硬體設備,具有一定通用性
五、Python庫之圖形藝術
5.1 Quads
對圖片進行四分迭代,形成像素風
可以生成動圖或靜圖圖像
簡單易用,具有很高展示度
5.2 ascii_art
將普通圖片轉為ASCII藝術風格
輸出可以是純文本或彩色文本
可腔孝採用圖片格式輸出
5.3 turtle
六、單元小結
6.1 從人機交互到藝術設計
PyQt5、wxPython、PyGObject
PyGame、Panda3D、cocos2d
VR Zero、pyovr、Vizard
Quads、ascii_art、turtle
相關資源:covid19:通過使用Python和Plotly構建的互動式圖表探索加拿大的CO...
文章知識點與官方知識檔案匹配
Python入門技能樹首頁概覽
215912 人正在系統學習中
點擊閱讀全文
打開CSDN APP,看更多技術內容
python人機交互設計_063 Python必備庫-從人機交互到藝術設計
Vizard: 基於Python的通用VR開發引擎,http://www.worldviz.com/vizard-virtual-reality-software 專業的企業級虛擬現實開發引擎 提供詳細的官方文檔 支持多種主流的VR硬體設備,具有一定通用性 五、Python庫之圖形藝術 5.1 Quads Quads: 迭...
繼續訪問
製作互動式數據可視化圖表,只需要一個Python庫就能實現!_翎子生。的...
Python第三方庫中我們最常用的可視化庫是 pandas,matplotlib,pyecharts, 當然還有 Tableau,另外最近在學習過程中發現另一款可視化神器-Plotly,它是一款用來做數據分析和可視化的在線平台,功能非常強大, 可以在線繪制很多圖形比如條形圖、散點...
繼續訪問
人機界面
Keras實施3D-VAE 配套 python 3.6 tensorflow-gpu 1.13.1 matplotlib 3.3.2 scikit-image 0.17.2 數據集 出於空間考慮,我們使用數據集,在此存儲庫中,我們僅在椅子類(03001627)的.binvox文件中提供體積數據,用於訓練和測試VAE,該文件位於./dataset下。 如果您想使用許多其他不同類型的對象進行訓練,則可以在上面的網站上找到完整的數據集,它需要一個帳戶來下載它們。 此外,斯坦福大學還在以下提供相同的數據集: : ,方便下載。 體積數據在ShapeNetVox32.tgz下,圖像數據在ShapeNetRendering.tgz下。 體積數據 椅子類中有6778個元素,完整的對象位於/dataset/03001627 。 我們還將其分為訓練集和測試集, /dataset/03001627_t
python人機交互界面設計_Python-Tkinter圖形化界面設計(詳細教程 )
聲明:本篇文章為轉載自https://www.jianshu.com/p/91844c5bca78,在原作者的基礎上添加目錄導航,旨在幫助大家以更高效率進行學習和開發。Python-Tkinter 圖形化界面設計(詳細教程)本文目錄一.圖形化界面設計的基本理解當前流行的計算機桌面應用程序大多數為圖形化用戶界面(Graphic User Interface,GUI),即通過滑鼠對菜單、按鈕等圖形化元...
繼續訪問
python編寫交互界面設計_使用python製作ArcGIS插件(4)界面交互
這是在插件執行交互性操作的時候所需要用到的。由於原始的python是沒有界面的,所以,這些元素就全靠pythonaddins封裝了。 其他的界面類,如按鈕類、組合框等,這些都是固定的設計。還有一部分是工具類型,如操作時的滑鼠指針,各種的滑鼠和...
繼續訪問
9.4 Python 從人機交互到藝術設計(圖形用戶界面/游戲開發/虛擬現實/圖形...
本文內容為北京理工大學Python慕課課程的課程講義, 將其整理為OneNote筆記同時添加了本人上課時的課堂筆記, 且主頁中的思維導圖就是根據課件內容整理而來, 為了方便大家和自己查看,特將此上傳到CSDN博文中, 源文件已經上傳到我的資源中,...
繼續訪問
python人機交互界面
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄1.加入背景圖片顯示界面代碼2.設置背景顏色代碼 提示:以下是本篇文章正文內容,下面案例可供參考 1.加入背景圖片顯示界面代碼 代碼如下(示例): import tkinter as tk root = tk.Tk() root.title('0-1背包實例數據集演算法平台') root.geometry('600x340') # 增加背景圖片 photo = tk.PhotoImage(file="D:\study\python.
繼續訪問
Pygame介紹以及下載
一、介紹 Pygame是一個利用SDL庫實現的模塊。SDL全稱Simple DirectMedia Layer,是一套開放源代碼的跨平台多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要相同或者相似的代碼就能開發出多個平台,比如linux、Windows、Mac OSX等的應用程序。 二、下載 Pygame官網:https://www.pygame.or...
繼續訪問
Dragonboard 410c Python 交互設計——PyQt環境搭建_ANDYMFC_No1的博客...
Python是一個非常容易上手和使用的語言,非常適合開發者快速的搭建和實現自己ideal原型,在開發中,可以通過Python快速的搭建自己的想法,並且後續很容易使用其他更高性能的語言進行局部或者全局的優化。UI交互設計是開發中常見的一個問題,今天...
繼續訪問
python如何實現界面交互設計_python圖形化界面設計(wxpython)三全面介紹...
窗口和對話框的交互 高級控制項 表格控制項 高級列表控制項 樹形控制項 樹表控制項 定時器控制項 WxPython庫中的高級功能 主要使用wxPython(最成熟的跨平台python GUI工具包) 前戲:基礎了解 importwxclass MyFrame(wx.Frame): #創建自定義Frame def...
繼續訪問
python人機交互界面設計_python_GUI頁面開發
GUI:人機交互圖形化界面,圖形頁面窗口,Windows系統就是一個龐大的GUI界面,比命令行更加讓人得以接受,使用更加簡便在python中的GUI界面是由tkinter提供的,使用前需導入變數 = tk.Tk():創建一個窗口,將他實例化變數 = geometry('長寬'):設置窗口的長寬頁面開發的最小內容:1.導入tkinter模塊2.創建主窗口對象3.將主窗口對象加入消息循環importt...
繼續訪問
python安裝pygame失敗_python下PyGame的下載與安裝過程及遇到問題
1.去官網下載PyGame注意:要下載對應版本的包其中,如果python為以下版本:(cp36就是python3.6的意思)2. .exe文件直接安裝.whl文件啟動doc命令安裝:在文件所在位置打開doc界面:(win10直接在當前文件夾空白處按住shift,右鍵打開powershell窗口)輸入以下指令安裝:pip install pygame-1.9.3-cp36-cp36m-win...
繼續訪問
基於Python的學生生活信息交互平台的設計和實現_天行IT科技館的博客-CS...
《基於Python的學生生活信息交互平台的設計和實現》該項目採用技術Python的django框架、mysql資料庫 ,項目含有源碼、論文、PPT、配套開發軟體、軟體安裝教程、項目發布教程、核心代碼介紹視頻等 軟體開發環境及開發工具: ...
繼續訪問
...python做互動式界面?_程序員小猴紫的博客_python交互...
界面設計:PyQt模塊,這個界面個人感覺是python中界面設計最好用的模塊,既可以使用窗口設計界面,又能使用CSS樣式。 2.界面設計 2.1打開PyQt designer界面 三步成界面,是不是很簡單,哈哈,你沒看錯,設計一個界面就是這么的簡單,當然我沒有...
繼續訪問
最新發布 python互聯網程序設計GUI程序設計和網路程序設計(人機互動聊天軟體)
(2)必備功能:伺服器客戶端之間能簡單發送和接收文件。至少應有序列化和反序列化功 能。收發雙方,應列印顯示發送或接收的原始對象的信息(非位元組串)。(1)必備功能:要求服務端代碼具有一定的智能,能夠根據不完整的問題識別客戶端真正 要問的問題。如客戶輸入how old, 伺服器能回答年齡。(1)測試TCP連接是否成功。(2)試接收信息是否完整。(4)測試其他無關鍵詞彙。(5)測試文件發送與接收。(3)測試智能回復聊天。(1)發送信息的函數。
繼續訪問
python人機交互界面設計_063 Python必備庫-從人機交互到藝術設計
一、概述Python庫之圖形用戶界面Python庫之游戲開發Python庫之虛擬現實Python庫之圖形藝術二、Python庫之圖形用戶界面2.1 PyQt5提供了創建Qt5程序的Python API介面Qt是非常成熟的跨平台桌面應用開發系統,完備GUI推薦的Python GUI開發第三方庫2.2 wxPython提供了專用於Python的跨平台GUI開發框架理解數據類型與索引的關系,操作索引即操...
繼續訪問
python編寫人機交互界面_中科院科研項目:人機交互—自然人機語音交互研究
本文來自微信公眾號——青人留學。中科院科研項目:人機交互—自然人機語音交互研究mp.weixin.qq.com項目簡介自上世紀90年代以來,隨著手寫識別、語音識別、網路通信技術的發展,人機交互已發生了巨變,一個完全不懂編程以及網路通信原理的普通小孩,可能會比計算機科學家和網路工程師更好地使用計算機。方式的變革使得人機交互變得簡單,而這個變革,就發生在短短不到30年內。可預見的是,未來計算機會更加...
繼續訪問
Pygame詳解:前言
Pygame官網:https://www.pygame.org Pygame的官網是有詳細的文檔的:https://www.pygame.org/docs/ 下圖是Pygame 的所有類和模塊,都有對應的文檔, 我做的就是 Pygame中文文檔,喜歡看英文原版的還是可以去看官網,不喜勿噴。 第一篇:Pygame詳解(一):Color類 ...
繼續訪問
cocos2d for python_Python版的cocos2d庫:一個2D游戲開發GUI框架的入門詳解
1 說明:=====1.1 cocos2d是一個基於MIT協議的開源框架,用於構建游戲、應用程序和其他圖形界面交互應用。1.2 不遜色於pygame,但是其實Python版的cocos2d庫是基於pygame和pyglet的,也就是集大成者。1.3 中文教程少的可憐,所以寫一個入門教程,把坑填了,親測過,注釋里有講解。1.4A 2D framework for games and multimed...
繼續訪問
python 游戲引擎 cocos2d_【Cocos2dx游戲開發】Cocos2d-x簡介
一、簡介最近在做一個Android下的卡牌游戲——《九州幻想》開發項目,而我們使用的引擎是Cocos2dx,所以想要寫寫筆記來記錄一下項目中的收獲。當然首先稍微介紹一下Cocos2d-x引擎:cocos2d-x是一個免費、開源、跨平台的2D游戲引擎。我們知道Cocos2d是一個基於MIT協議的開源框架,用於構建游戲、應用程序和其他圖形界面交互應用。最初cocos2d僅是一個用Python語言寫的游...
繼續訪問
python編寫人機交互界面_【021】重磅!人機交互設計項目(全下載)|1藍調百香果跨年熱文大賽作品...
項目4:人機交互設計項目───自動售貨程序設計梁玉華山東昌樂二中隨著科技的不斷發展,計算機的出現引發關於「人機交互」的研究已經有半個世紀的歷史。從最早的二進制大型計算機到現在的人工智慧,幾乎全世界的高科技精英們都在為人機交互的發展和前進不懈努力,未來人們生活的各個領域,人機交互將無處不在。自動售貨機是人機交互技術在生活中的一項典型應用,本項目將以「自動售貨程序設計」為主線,經歷生活...
繼續訪問
Python 計算生態概覽
文章目錄Python 計算生態概覽Python 計算程序設計思維Python 計算生態概覽從數據處理到人工智慧Python庫之數據分析Numpy: 表達N維數組的最基礎庫Pandas: Python數據分析高層次應用庫SciPy: 數學、科學和工程計算功能庫Python庫之數據可視化Matplotlib: 高質量的二維數據可視化功能庫Seaborn: 統計類數據可視化功能庫Mayavi:三維科學數據可視化功能庫Python庫之文本處理PyPDF2: 用來處理pdf文件的工具集NLTK: 自然語言文本處理第三
繼續訪問
利用Python+Cocos2d製作《貓吃老鼠》小游戲
因此,如果在代碼的其他位置更新過self.position(或者self.x或者self.y),千萬不要忘記調用update_cshape()更新cshape的位置。除了以上這幾個方法以外,CollisionManagerGrid類還定義了一些其他有用的方法,如they_collide(),any_near(),objs_near(),objs_near_wdistance(),ranked_objs_near(),iter_all_collisions()等,鑒於篇幅有限,不再一一介紹。
繼續訪問
Python實戰案例:Python使用cocos2d實現捕魚達人
Python實戰案例:Python使用cocos2d實現捕魚達人 游戲,它是一種基於物質需求滿足之上的,在一些特定時間、空間范圍內遵循某種特定規則的,追求精神世界需求滿足的社會行為方式。合理適度的游戲允許人類在模擬環境下挑戰和克服障礙,可以幫助人類開發智力、鍛煉思維和反應能力。一般的小型游戲都是一些隨機變化的事物,根據滑鼠或鍵盤的操作來完成對變化事物的點擊操作或者控制操作,最終實現娛樂的目的。 如下圖為地鐵跑酷的界面。 上圖中人就是一個控制的元素,通過控制人的左右和跳躍,最終對金幣進行累加的游戲。
繼續訪問
python 人機交互 輸入輸出以及格式處理
輸入函數:input() ; 輸出函數:print() 例子: x = input('請輸入:') input 函數接收的是字元串。 將字元串轉化為int 型方式 例子: x = input('請輸入x的值:') y = input('請輸入y的值: ') z = x + y print(z) 運行程序: 請輸入x的值:1 請輸入y的值:1 11 #列印變數z結果 x = input('請輸入x的值:') y = input('請輸入y的值: ') z = int(x) + int
繼續訪問
熱門推薦 python編程(關於cocos2d)
【 聲明:版權所有,歡迎轉載,請勿用於商業用途。 聯系信箱:feixiaoxing @163.com】 做游戲的同學大約對cocos2dx不會陌生,基本上做2d游戲都會用到這一款引擎。但是下載cocos2dx非常麻煩,不光文件很大,還要配置visual studio,所以我在想要是linux下面也有一款類似的軟體就好了。所以,趁周末找了找,沒想到還真有,這就是python版本的coco
繼續訪問
Pygame精靈和碰撞檢測
在開始學習相關知識點之前,我們有必要先學習精靈和碰撞檢測的含義。 精靈(英文譯為 Sprite),其實在一個游戲程序中,精靈本質指的是一張張小尺寸的圖片,比如游戲中的各種道具、人物、場景裝飾等,它們都可以看做成一張張小的「精靈」圖。除此之外,人物的移動也可以看做是一系列小精靈圖構成的序列(按幀組成的序列) 如果將逐幀分解後的動作,按照一定的頻率播放,那麼就形成了動畫精靈,您將會看到雄鷹展翅高飛、人在策馬奔騰、運動員奮力跳遠。 精靈有個特點就是允許精靈之間進行交互,也稱之為碰撞,而碰撞檢測,指的就是檢測兩個精
繼續訪問
python人機交互界面設計_python做一個gui
本人是做介面測試的,而很多介面現在對於安全方面有了很大的重視,所以往往在介面層上做了一些加密,比如MD5、AES、SHA之類的加密,而每次加密,都是自己利用python編寫腳本而生成sign值,這往往對於自己在工具效率上無法提高,所以就產生了自己編寫一個簡單的加密+請求介面的小工具的想法。因為本人現在主要是以python為主,所以在選擇的時候,就從這方面入手。許多人在學習如何創建一個 GUI 應用...
4. 用數據結構(c語言版)編寫的學生選課系統
根據自己的需要,自己看著修改一下 ^^
#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程運慧子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\廳穗t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->扮悄卜nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
p2->next=NULL;
}
void inputc()//錄入課程主函數
{
int i;
printf("\t\t\t錄入課程信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2->next=NULL;
}
void inputs()//錄入學生信息主函數
{
int i;
printf("\t\t\t錄入學生信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
void store()//信息主函數
{
int i;
printf("\t\t系統信息查看及存儲\n");
printf("1.查看課程信息\n");
printf("2.查看學生信息\n");
printf("3.存儲信息\n");
printf("4.返回主菜單\n");
printf("請輸入(1~4):\n");
scanf("%d",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\n");
printf("1.錄入課程信息\n");
printf("2.課程管理\n");
printf("3.錄入學生信息\n");
printf("4.學生信息管理\n");
printf("5.學生選課\n");
printf("6.系統信息查看及存儲\n");
printf("7.退出系統\n");
printf("\n請輸入菜單選項(1~7):\n");
scanf("%d",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}
5. shell命令和linux命令一樣么
Linux命令就是shell命令。不同的shell有不同的命令。Linux命令包括所有的shell
6. 做上位機軟體用VB還是C語言好啊
都可以。
從實歷閉現功能上,二者並沒有區別。
具體選擇在於編程人搜信員對於哪種軟體更熟悉。
相對來說,用C語言可以更高效的操作硬體。世爛輪而用VB可以實現更友好的界面。
7. 請問數控系統的人機界面用C語言能實現嗎還是用C++ MFC 比較好啊(如下圖界面)
C語言用來開發硬體比較方便,但是開發界面帶旦來說蠢汪擾的話,用C++的MFC 開發是比較方便陵春的,畢竟用到了面向對象的思維。
8. 我也在做這個課題,不過我不會,有沒有C語言編程的程序,這個課題做人機界面該怎麼做,
沒有可以自己編啊。
9. 十萬火急!C語言怎樣編人機界面
你可以參考該程序,tc2.0下通過,源自《C語言課程設計案例精編》;
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/
typedef struct /*定義數據結構*/
{
char name[20]; /*姓名*/
char units[30]; /*單位*/
char tele[10]; /*電話*/
}ADDRESS;
/******以下是函數原型*******/
int enter(ADDRESS t[]); /*輸入記錄*/
void list(ADDRESS t[],int n); /*顯示記錄*/
void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/
int delete(ADDRESS t[],int n); /*刪除記錄*/
int add(ADDRESS t[],int n); /*插入記錄*/
void save(ADDRESS t[],int n); /*記錄保存為文件*/
int load(ADDRESS t[]); /*從文件中讀記錄*/
void display(ADDRESS t[]); /*按序號查找顯示記錄*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void qseek(ADDRESS t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(ADDRESS temp); /*顯示單條記錄*/
int find(ADDRESS t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/
/******主函數開始*******/
main()
{
int i;
ADDRESS adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}
/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c<0||c>11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(ADDRESS t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}
/*顯示記錄,參數為記錄數組和記錄條數*/
void list(ADDRESS t[],int n)
{
int i;
clrscr();
printf("\n\n*******************ADDRESS******************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end*******************\n");
}
/*查找記錄*/
void search(ADDRESS t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/
}
/*顯示指定的一條記錄*/
void print(ADDRESS temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);
printf("**********************end***********************\n");
}
/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/
}
return i; /*返回i值*/
}
/*刪除函數,參數為記錄數組和記錄條數*/
int delete(ADDRESS t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;j++) /*刪除該記錄,實際後續記錄前移*/
{
strcpy(t[j-1].name,t[j].name); /*將後一條記錄的姓名拷貝到前一條*/
strcpy(t[j-1].units,t[j].units); /*將後一條記錄的單位拷貝到前一條*/
strcpy(t[j-1].tele,t[j].tele); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}
/*插入記錄函數,參數為結構體數組和記錄數*/
int add(ADDRESS t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
ADDRESS temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("name unit telephone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-1;j>=i;j--) /*從最後一個結點開始向後移動一條*/
{
strcpy(t[j+1].name,t[j].name); /*當前記錄的姓名拷貝到後一條*/
strcpy(t[j+1].units,t[j].units); /*當前記錄的單位拷貝到後一條*/
strcpy(t[j+1].tele,t[j].tele); /*當前記錄的電話拷貝到後一條*/
}
strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/
strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個位置*/
strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個位置*/
n++; /*記錄數加1*/
return n; /*返回記錄數*/
}
/*保存函數,參數為結構體數組和記錄數*/
void save(ADDRESS t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}
/*讀入函數,參數為結構體數組*/
int load(ADDRESS t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}
/*按序號顯示記錄函數*/
void display(ADDRESS t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}
/*排序函數,參數為結構體數組和記錄數*/
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
flag=1;
strcpy(temp.name,t[j].name); /*交換記錄*/
strcpy(temp.units,t[j].units);
strcpy(temp.tele,t[j].tele);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].units,t[j+1].units);
strcpy(t[j].tele,t[j+1].tele);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].units,temp.units);
strcpy(t[j+1].tele,temp.tele);
}
if(flag==0)break; /*如果標志為0,說明沒有發生過交換循環結束*/
}
printf("sort sucess!!!\n"); /*顯示排序成功*/
}
/*快速查找,參數為結構體數組和記錄數*/
void qseek(ADDRESS t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}
/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,
temp[i].tele); /*讀入記錄*/
fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,
temp[i].units,temp[i].tele); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}
10. 如何使用C語言編寫圖書管理系統
圖書管理系統是運行於Windows系統下的應用軟體,主要用於對圖書館中的圖書信息進行增、刪、改、查等操作,並且還可對使用該系統的用戶進行登錄名和密碼的管理等。系統給用戶提供了一個簡單的人機界面,使用戶可以根據提示輸入操作項,調用系統提供的管理功能。
所需功能類似於學生成績管理系統,界面可參考附錄C。用戶分為管理員和一般人員兩大類。
功能需求描述如下。
①用戶登錄:根據用戶輸入的用戶名和密碼判斷是否允許該用戶使用本系統,並且當用戶登錄後根據用戶許可權判斷用戶可以使用哪些功能。學生只有瀏覽等許可權而不能進行實質性改動。
②提供系統主控平台:系統主控平台也應根據用戶許可權不同而有所區別,只列出在用戶許可權范圍內的功能供用戶選擇。系統主控平台包括輸入功能選項、調用相應程序兩大需求。教師和學生對應的系統主控平台是不同的。所能進行的操作也不相同。
③創建圖書信息文件:用戶根據提示輸入圖書編號、圖書分類號、書名、作者姓名、出版社名、出版年月、定價、存庫數量和借閱和上架情況等等信息存儲在系統磁碟的文件中。以便進行管理、查找和備份。
④增加圖書信息:可在原有圖書信息文件的基礎上增加新的圖書信息記錄並繼續保存至磁碟,並且將增加後的文件存儲狀況顯示給用戶。
⑤刪除圖書信息:提示用戶輸入要進行刪除操作的圖書編號,如果在文件中有該信息存在,則將該書號所對應的記錄刪除。並選擇是否繼續進行刪除操作。
⑥修改圖書信息:提示用戶輸入要進行修改操作的書號,如果在文件中有該息存在,則將提示用戶輸入該書號對應的要修改的選項,結果存儲於文件。該部分需求也需要提示用戶選擇是否繼續進行修改操作。
⑦查詢圖書信息:提供按書號或書名等查詢。在該功能中,也需提示用戶是否需要繼續查再繼續查找,則返回主界面。
⑧一般用戶查詢個人的借閱情況並按日期進行排序:。
⑨管理員和一般用戶管理:管理員對用戶的管理也需要進行用戶的創建、增加、刪除、瀏覽。管理員創建的用戶存儲在名為yonghu的磁碟文件中,每當有用戶登錄系統時,會根據該文件中的用戶名和密碼進行核實判斷,用戶才能夠順利登錄。管理員還具有用戶的功能。增加的用戶及密碼、許可權等也被繼續存儲在yonghu文件中。當某些用一用該系統時,還可以進行刪除操作,並且管理員具有修改用戶許可權的功能,一般用戶和管理員對於系統的許可權是不一樣的。