學生檔案管理系統c語言
㈠ 學生學籍信息管理系統 C語言設計題
學籍管理系統軟體需求分析
________________________________________
編著 於博海、王利森、王艷梅、李岩、呂靖
1 引言
信息社會的高科技,商品經濟化的高效益,使計算機的應用已普及到經濟和社會生活的各個領域。計算機雖然與人類的關系愈來愈密切,還有人由於計算機操作不方便繼續用手工勞動。為了適應現代社會人們高度強烈的時間觀念,學籍管理系統軟體為教學辦公室帶來了極大的方便。該軟體是以漢語編程語言為實現語言,其功能在系統內部有源代碼直接完成。通過操作手冊,使用者可以了解本軟體的基本工作原理。操作人員只需輸入一些簡單的漢字、數字,即可達到自己的目標。
1.1 編寫目的
本需求的編寫目的在於研究學籍管理系統軟體的開發途徑和應用方法。
本需求的預期讀者是與學籍管理系統軟體開發有聯系的決策人,開發組成人員,扶助開發者,支持本項目的領導和公司人員,軟體驗證者。
1.2 背景及范圍
本項目的名稱:學籍管理系統開發軟體。
本項目的任務提出者及開發者是學籍管理系統軟體開發小組,用戶是教學辦公室。
本產品能具體化、合理化的管理學生的學籍檔案,用結構化的思維方式去了解計算機的基本工作原理和漢語程序設計語言。
1.3 定義 縮寫詞 略語
漢語程序設計語言:它是由北京元易達科技發展有限責任公司完全自主開發,完全自主版權的計算機語言,以漢語字詞為結構,最大限度的利用漢語本身的特點,是一種基於漢語基礎的通用的計算機的程序設計語言。
學籍管理系統: 學籍管理是幫助教學人員、行政人員對人事檔案的管理軟體。使用漢語編程語言,獨立完成其功能。
1.4 參考資料
<<漢語程序設計語言>> --------沈志斌 編著
電子工業出版社
<<軟體工程>> --------王利福 張世琨 朱冰 編著
北京大學出版社
<<資料庫原理及應用>> --------李紹原 主編
科學出版社
2 項目概述
該學籍管理系統軟體目前已有比較完善的管理與使用功能,並且是計算機行業中用漢語編程來完成的新軟體成員。研製學籍管理系統軟體是為了滿足教學辦公室對學生檔案管理的方便,以現代化的創新思維模式去工作。
2.1 目標
2.1.1 開發意圖
a. 為了學籍管理系統更完善;
b. 為了教學辦公室對學生檔案的管理更方便;
c. 為了減輕行政人員的工作負擔。
2.1.2 應用目標
通過本系統軟體,能幫助教研人員利用計算機,快速方便的對學生學籍管理進行管理、輸入、輸出、查找的所需操作,使散亂的人事檔案能夠具體化,直觀化、合理化。
2.1.3 作用及范圍
本軟體適用於教育界,它是比較完善的系統管理軟體,對學生的學籍可以隨時輸入、輸出、查找。
2.1.4 背景
現今學籍管理的繁索給具有強烈時間觀念的行政人員帶來了諸多不便,教學辦公室缺少一種完善的學籍管理軟體,為了對學生檔案的管理方便,因此開發了本軟體。
2.2 產品描述
本產品是一種依賴於漢語編程為基礎的系統軟體,它是以漢語編程系統詞為基礎,用漢語程序設計語言進行編程的產品。
2.3 產品功能
2.3.1 外部功能
學籍管理系統軟體具有輸入、輸出、查找功能。
2.3.2 內部功能
該軟體集命令、編程、編輯於一體,完成過濾、定位顯示。
2.3.3 功能表
2.3.4 功能描述圖
2.3.5 用戶特點
本軟體的使用對象是教學辦公室工作人員。會漢語、懂計算機的基本操作就可以利用該軟體進行所需操作。同時也會對漢語編程有認識。
2.4 一般約束
a. 本項目的開發經費不超過1萬元;
b. 輔導老師2人,開發人員6人;
c. 在管理方針,硬體的限制,並行操作安全和保密方面無約束。
2.5 假設和依據
假設開發經費不到位,管理不完善,設計時沒能用全得到考慮,本項目的開發都將受到很大的影響。
3 具體需求
3.1 功能需求(一)
3.1.1 規格說明
輸入每個人的具體信息
3.1.2 引言
為了把個人信息(包括:學號、姓名、性別、年級、班級、系別、專業、戶口所在地、家庭住址、聯系電話、戶口分類、考前學歷、現今學歷、出生日期、民族、政治面貌、身份證號、文考准考證號、自考准考證號、填卡日期、備注)輸入到資料庫。
3.1.3 輸入
個人信息。
3.1.4 加工
通過學籍管理系統輸入到資料庫中。
3.1.5 輸出
個人的全部信息。
3.2 功能需求(二)
3.2.1 規格說明
查詢個人的全部信息。
㈡ 80分獎勵給一個C語言源代碼「檔案管理系統的設計」
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
/*********************** 字定義函數聲明 ********************************/
void Add(); //增加記錄
void Delete(); //刪除記錄
void Search(); //查找記錄
void Alter(); //修改記錄
void Views(); //查看所有記錄
void delete_all(); //清除所有記錄
int check(char strID[]); //查找文件記錄中已經存在的學生ID
/********************* 定義學生信息結構體 **********/
struct student
{
//學生信息(學號,姓名,性別,籍貫,電話,住址,民族);
char ID[10];
char name[10];
char sex[4];
char nativePlace[10];
char phone[13];
char nation[6];
};
struct student stu;
FILE *fp;//定義文件指針
/********************* main() 主函數 *************************************/
void main()
{
int flag;
while(flag!=7)
{
printf("\n\t\t 【 請選擇您所要的操作 】 \n");
printf("\t\t‖****************************************‖\n");
printf("\t\t‖ 1、增加記錄 4、修改記錄 ‖\n");
printf("\t\t‖ 2、刪除記錄 5、清除所有記錄 ‖\n");
printf("\t\t‖ 3、查詢記錄 6、所有記錄列表 ‖\n");
printf("\t\t‖ 〖 按任意鍵退出 〗 ‖\n");
printf("\t\t‖****************************************‖\n");
scanf("%d",&flag);
switch(flag)
{
case 1:
Add(); //增加記錄
getch();
system("cls");
break;
case 2:
Delete(); //刪除記錄
getch();
system("cls");
break;
case 3:
Search(); //查找記錄
getch();
system("cls");
break;
case 4:
Alter(); //修改記錄
getch();
system("cls");
break;
case 5:
delete_all(); //清空所有記錄
getch();
system("cls");
break;
case 6:
Views(); //查看所有記錄
getch();
system("cls");
break;
default:
exit(0);
}
}
}
/***************** 插入新記錄 *******************************/
void Add()
{
if((fp=fopen("StudentMessage","ab+"))==NULL)
{
printf("學生信息文件打開失敗!");
exit(1);
}
else
{
int check_add(char stuID[]);
long flength,offset;
int k=0,t; //t用來接收check()函數的傳值
char str[53];
fseek(fp,0,SEEK_END);
flength=ftell(fp)/sizeof(stu); //統計文件中有多少條記錄
printf("\t請輸入要插入的學生的信息:\n");
input_message:
printf("\t學號:");
scanf("%s",&stu.ID);
t=check_add(stu.ID);
if(t==1)
{
printf("\t》 該學號已經存在,不允許重復插入!請重新輸入一個學號。《\n");
goto input_message; //跳轉到「input_message」標記處繼續執行
}
printf("\t姓名:");
scanf("%s",&stu.name);
printf("\t性別:");
scanf("%s",&stu.sex);
printf("\t籍貫:");
scanf("%s",&stu.nation);
printf("\t電話:");
scanf("%s",&stu.phone);
printf("\t名族:");
scanf("%s",&stu.nativePlace);
rewind(fp);
//檢測文件中是否有空字元串,如果有則在此處插入新記錄,如果沒有則插入到文件尾
while(!feof(fp))
{
fread(&str,sizeof(stu),1,fp);
//檢測到空字元串,則將fp所指向的文件關閉,以讀寫方式重新打開
if(strcmp(str,"")==0)
{
fclose(fp);
fp=fopen("StudentMessage","rb+");
break;
}
k++;
}
offset=sizeof(stu)*k;
fseek(fp,offset,SEEK_SET);
fwrite(&stu,sizeof(stu),1,fp);
fclose(fp);
printf("插入數據成功!\n");
}
}
/****************** 檢測將要插入的學號是否已存在文件記錄中 **************************/
int check(char stuID[10])
{
int id=0,k=1;
FILE *fpp;
struct student checkID;
if((fpp=fopen("StudentMessage","rb"))==NULL) //以只讀方式打開一個二進制文件StudentMessage
{
printf("文件打開失敗!\n");
exit(1);//打開失敗,返回系統
}
while(!feof(fpp))
{
fread(&checkID,sizeof(stu),1,fpp);
//檢測用戶輸入的學號是否已經存在,若存在則終止程序的執行
if(strcmp(checkID.ID,stuID)==0)
{
break;
}
id++;
}
fclose(fpp);
return id*k;
}
/******************** 檢測輸入的學號是否能插入 *****************************************/
int check_add(char stuID[10])
{
int id;
FILE *fpp;
struct student checkID;
if((fpp=fopen("StudentMessage","rb"))==NULL) //以只讀方式打開一個二進制文件StudentMessage
{
printf("文件打開失敗!\n");
exit(1);//打開失敗,返回系統
}
while(!feof(fpp))
{
fread(&checkID,sizeof(stu),1,fpp);
//檢測用戶輸入的學號是否已經存在,若存在則終止程序的執行
if(strcmp(checkID.ID,stuID)==0)
{
id=1;
break;
}
else
{
id=0;
}
}
fclose(fpp);
return id;
}
/******************* 根據用戶輸入的學號刪除記錄 ************/
void Delete()
{
printf("刪除相應記錄!\n");
if((fp=fopen("StudentMessage","rb+"))==NULL) //以可讀可寫方式打開一個二進制文件
{
printf("文件打開失敗!\n");
return;
}
else
{
char message[10]; //接收用戶需要刪除的學號
int i;
long flength;
fseek(fp,0,SEEK_END); //把文件指針移到文件尾
flength=ftell(fp)/sizeof(struct student); //計算文件中有多少條記錄
printf("\t請輸入您要刪除的學號:");
scanf("%s",message);
i=check(message);
long offset=sizeof(stu)*i; //記錄要刪除的學號的位置
if(flength==0)
{
printf("文件記錄為空!\n");
return;
}
else if(i>flength)
{
printf("沒有該學生信息!\n");
return;
}
else
{
//將要刪除的字元串全部置為空
strcpy(stu.ID,"");
strcpy(stu.name,"");
strcpy(stu.sex,"");
strcpy(stu.nation,"");
strcpy(stu.phone,"");
strcpy(stu.nativePlace,"");
fseek(fp,offset,SEEK_SET); //移動指針到要刪除的學號的位置
fwrite(&stu,sizeof(stu),1,fp); //將置空的信息重新寫回到文件中
printf("\t\t數據刪除成功!\n");
}
fclose(fp);
}
}
/****************** 查找數據 ***************************************/
void Search()
{
if((fp=fopen("StudentMessage","rb"))==NULL) //以只讀方式打開StudentMessage文件
{
printf("\t文件打開失敗!\n");
return;
}
else
{
char message[10]; //接收用戶需要查找的信息
int i;
long flength,offset;
fseek(fp,0,SEEK_END); //將文件指針移文件尾
flength=ftell(fp)/sizeof(struct student); //得到文件中有多少條記錄
printf("\t請輸入您要查找的學號:");
scanf("%s",message);
i=check(message);
offset=sizeof(struct student)*i;
if(flength==0)
{
printf("\t文件記錄為空!\n");
return;
}
else if(i>flength)
{
printf("\t\t查找失敗,沒有找到相應信息!\n");
return;
}
else
{
//輸出查找到的內容
rewind(fp);
fseek(fp,offset,SEEK_SET);
fread(&stu,sizeof(struct student),1,fp);
printf("學號:%s ",stu.ID);
printf("姓名:%s ",stu.name);
printf("性別:%s ",stu.sex);
printf("籍貫:%s ",stu.nation);
printf("電話:%s ",stu.phone);
printf("民族:%s\n",stu.nativePlace);
}
fclose(fp);
}
}
/****************** 修改記錄 ********************************/
void Alter()
{
printf("修改相應記錄!\n");
if((fp=fopen("StudentMessage","rb+"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
else
{
char message[10]; //存儲用戶要修改的學號
int i;
long flength,offset;
fseek(fp,0,SEEK_END); //移動文件指針到文件尾
flength=ftell(fp)/sizeof(struct student); //得到文件中有多少條記錄
printf("\t請輸入您要修改的學號:");
scanf("%s",message);
i=check(message);
offset=sizeof(struct student)*i; //記錄要修改的記錄在文件中的位置
if(flength==0)
{
printf("文件記錄為空!\n");
return;
}
else if(i>flength)
{
printf("沒有該學生信息!\n");
return;
}
else
{
rewind(fp);
fseek(fp,offset,SEEK_SET);
fread(&stu,sizeof(struct student),1,fp);
printf("該學生原來的信息:\n");
printf("\t學號:%s ",stu.ID);
printf("姓名:%s ",stu.name);
printf("性別:%s ",stu.sex);
printf("籍貫:%s ",stu.nation);
printf("電話:%s ",stu.phone);
printf("名族:%s\n\n",stu.nativePlace);
printf("請更新該學生的信息:\n");
strcpy(stu.ID,message);
printf("\t姓名:");
scanf("%s",&stu.name);
printf("\t性別:");
scanf("%s",&stu.sex);
printf("\t籍貫:");
scanf("%s",&stu.nation);
printf("\t電話:");
scanf("%s",&stu.phone);
printf("\t名族:");
scanf("%s",&stu.nativePlace);
fseek(fp,offset,SEEK_SET); //將文件指針指向要修改的地方
fwrite(&stu,sizeof(stu),1,fp); //將修改後的內容重新寫回到原來的地方
printf("\t數據更新成功!\n");
}
fclose(fp);
}
}
/************** 查看所有記錄 ************************************/
void Views()
{
long flength;
if((fp=fopen("StudentMessage","rb"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
fseek(fp,0,SEEK_END); //移動文件指針到文件尾
flength=ftell(fp)/sizeof(struct student); //得到文件中有多少條記錄
if(flength==0)
{
printf("文件中沒有記錄!");
return;
}
rewind(fp); //將文件指針移動到文件頭
printf("\t\t\t所有記錄列表\n\n");
while(!feof(fp))
{
fread(&stu,sizeof(stu),1,fp);
if(strcmp(stu.ID,"")!=0) //檢測文件中的空字元串,如果不是空字元串則輸出
{
printf("學號:%s ",stu.ID);
printf("姓名:%s ",stu.name);
printf("性別:%s ",stu.sex);
printf("籍貫:%s ",stu.nation);
printf("電話:%s ",stu.phone);
printf("民族:%s\n",stu.nativePlace);
}
}
fclose(fp);
}
/******************** 刪除所有記錄 ********************************/
void delete_all()
{
int ch;
printf("該操作將刪除所有記錄,按「0」退出,按「1」繼續。\n");
scanf("%d",&ch);
switch(ch)
{
case 0:
break;
case 1:
printf("將刪除所有記錄,繼續請按「1」,退出請按「0」。\n");
scanf("%d",&ch);
switch(ch)
{
case 0:
break;
case 1:
if (remove("StudentMessage") == 0) //刪除StudentMessage文件
{
printf("操作成功,所有記錄已經刪除!");
}
else
{
perror("remove"); //如果刪除不成功則輸出系統出錯的信息
}
break;
}
}
}