小編給大家分享一下C語言學(xué)生成績(jī)管理系統(tǒng)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、重慶網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)成都定制網(wǎng)站等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都石涼亭等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致稱贊!
具體內(nèi)容如下
一、本設(shè)計(jì)涉及的重要C語言知識(shí)有:
1.單鏈表的各種操作
2.文件流的操作
3.單鏈表的排序
二、本設(shè)計(jì)主要以下幾個(gè)模塊組成
1.學(xué)生成績(jī)添加模塊
2.學(xué)生成績(jī)刪除模塊
3.學(xué)生成績(jī)修改模塊
4.學(xué)生成績(jī)檢索模塊
5.學(xué)生成績(jī)顯示模塊(包括成績(jī)排序)
6.學(xué)生成績(jī)保存模塊
效果圖:


本設(shè)計(jì)大概5、6百行代碼左右,通過這個(gè)設(shè)計(jì),本人感覺C語言熟練了很多,
希望能對(duì)像我一樣的C語言菜鳥同學(xué)會(huì)有點(diǎn)幫助,廢話少說,咱們上代碼!
三、程序代碼
1.main.c
這個(gè)文件內(nèi)主要完成主菜單的跳轉(zhuǎn)和接受用戶信息完成到各個(gè)模塊的跳轉(zhuǎn)。
#include <stdio.h>
#include "students.h"
int select_menu(void);
void hand_menu(int cmd, int *flag);
void quit();
int main(int argc, char *argv[])
{
int cmd;
int flag = 0;
while(1){
cmd = select_menu();
hand_menu(cmd, &flag);
}
}
int select_menu(void)
{
int select = 0;
printf("**************************************************************\n\n");
printf(" 學(xué)生管理系統(tǒng) \n");
printf(" 1:添加學(xué)生信息 2:刪除學(xué)生信息\n");
printf(" 3:修改學(xué)生信息 4:查詢學(xué)生信息\n");
printf(" 5:查看學(xué)生信息 6:保存\n");
printf(" 0:退出\n\n");
printf("**************************************************************\n");
printf("請(qǐng)選擇:");
select=getch();
while(select<'0'||select>'6'){
printf("\n輸入錯(cuò)誤,請(qǐng)重新選擇:");
select=getch();
}
return select;
}
void hand_menu(int cmd, int *flag)
{
static STU *stu_head = NULL;
if(*flag == 0){
stu_head = init_student(stu_head);
*flag = 1;
}
switch(cmd){
case '0':
save_student(stu_head);
quit();
break;
case '1':
system("cls");
stu_head = add_student(stu_head);
system("cls");
break;
case '2':
system("cls");
stu_head = del_student(stu_head);
system("cls");
break;
case '3':
system("cls");
modify_student(stu_head);
system("cls");
break;
case '4':
system("cls");
search_student(stu_head);
system("cls");
break;
case '5':
system("cls");
stu_head = display_student(stu_head);
system("cls");
break;
case '6':
system("cls");
save_student(stu_head);
system("cls");
break;
default:
break;
}
}
void quit()
{
printf("\n感謝使用學(xué)生管理系統(tǒng)!\n");
exit(0);
}2.students.h
這個(gè)文件主要包含students.c文件函數(shù)操作所需的定義。
#ifndef _STUDENTS_H_
#define _STUDENTS_H_
typedef struct st{
unsigned long ID;
char name[10];
float chinese;
float math;
float english;
double all_sub;
float average;
struct st* next;
}STU;
#define ASK_STU(p) do{p=(STU *)malloc(sizeof(STU));\
if(p==NULL){printf("malloc memory failed!\n");exit(1);}\
}while(0)
STU *search_by_nb(STU *stu_head, unsigned long nb);
STU *search_by_name(STU *stu_head, char name[]);
STU *select_sort(STU *g, char flag);
STU *add_student(STU *stu_head);
STU *del_all(STU *stu_head);
STU *del_one(STU *stu_head, int flag);
STU *del_student(STU *stu_head);
void modify_student(STU *stu_head);
STU *display_student(STU *stu_head);
STU *search_by_name(STU *stu_head, char name[]);
STU *search_by_nb(STU *stu_head, unsigned long nb);
#endif3.store.h
#ifndef _STORE_H_ #define _STORE_H_ void save_student(STU *stu_head); STU *init_student(STU *stu_head); #endif
4.students.c
這個(gè)文件是本設(shè)計(jì)的核心部分,包括各個(gè)模塊的實(shí)現(xiàn)函數(shù),
包括添加,刪除,修改,查找,顯示學(xué)生信息這幾個(gè)模塊的實(shí)現(xiàn)。
#include <stdio.h>
#include "students.h"
STU *select_sort(STU *g, char flag)
{
STU *p,*q,*t,*s,*h;
h=(STU *)malloc(sizeof(STU));
h->next=g;
p=h;
while(p->next->next!=NULL)
{
for(s=p,q=p->next;q->next!=NULL;q=q->next)
{
if(flag == '1')
if(q->next->ID<s->next->ID)
s=q;
if(flag == '2')
if(q->next->chinese<s->next->chinese)
s=q;
if(flag == '3')
if(q->next->math<s->next->math)
s=q;
if(flag == '4')
if(q->next->english<s->next->english)
s=q;
if(flag == '5')
if(q->next->average<s->next->average)
s=q;
}
if(s!=q)
{
t=s->next;
s->next=t->next;
t->next=p->next;
p->next=t;
}
p=p->next;
}
g=h->next;
free(h);
return g;
}
STU *add_student(STU *stu_head)
{
STU *stu;
STU *head = stu_head;
STU *node = stu_head;
STU *node_fd;
int sel;
ASK_STU(stu);
stu->next = NULL;
printf("請(qǐng)輸入學(xué)生學(xué)號(hào):");
scanf("%d", &stu->ID);
while(search_by_nb(node, stu->ID)){
printf("已經(jīng)存在該學(xué)號(hào)!請(qǐng)重新輸入一個(gè)學(xué)號(hào):");
scanf("%d", &stu->ID);
}
printf("請(qǐng)輸入學(xué)生名字:");
scanf("%s", stu->name);
printf("請(qǐng)輸入該學(xué)生英語成績(jī):");
scanf("%f", &stu->english);
while(stu->english < 0.0 || stu->english > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī):");
scanf("%f", &stu->english);
}
printf("請(qǐng)輸入該學(xué)生數(shù)學(xué)成績(jī):");
scanf("%f", &stu->math);
while(stu->math < 0.0 || stu->math > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī):");
scanf("%f", &stu->math);
}
printf("請(qǐng)輸入該學(xué)生語文成績(jī):");
scanf("%f", &stu->chinese);
while(stu->chinese < 0.0 || stu->chinese > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī):");
scanf("%f", &stu->chinese);
}
stu->all_sub = stu->chinese+stu->math+stu->english;
stu->average = stu->all_sub/3;
if(!head){
head = stu;
return head;
}
while(node->next)
node = node->next;
node->next = stu;
head = select_sort(head, '1');
return head;
}
STU *del_all(STU *stu_head)
{
if(!stu_head)
return NULL;
del_all(stu_head->next);
free(stu_head);
stu_head = NULL;
return NULL;
}
STU *del_one(STU *stu_head, int flag)
{
STU *node = stu_head;
STU *head = stu_head;
STU *pre;
char name[10];
unsigned long ID;
if(head = NULL){
printf("沒有任何學(xué)生信息!\n");
return head;
}
if(flag == '2'){
printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生姓名:");
scanf("%s", name);
if(!strcmp(node->name, name)){
free(node);
head = node->next;
printf("成功刪除!按任意鍵返回。\n");
getch();
return head;
}
while(node){
if(!strcmp(node->name, name)){
pre->next = node->next;
free(node);
printf("成功刪除!按任意鍵返回。\n");
getch();
return head;
}
pre = node;
node = node->next;
}
printf("沒有找到該學(xué)生信息!\n");
return head;
}
if(flag == '3'){
printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):");
scanf("%d", &ID);
if(node->ID == ID){
free(node);
head = node->next;
printf("成功刪除!按任意鍵返回。\n");
getch();
return head;
}
while(node){
if(!strcmp(node->name, name)){
pre->next = node->next;
free(node);
printf("成功刪除!按任意鍵返回。\n");
getch();
return head;
}
pre = node;
node = node->next;
}
printf("沒有找到該學(xué)生信息!按任意鍵返回\n");
getch();
return head;
}
}
STU *del_student(STU *stu_head)
{
int sel;
STU *head = stu_head;
printf("1:刪除全部 2:按名字刪除 3:按學(xué)號(hào)刪除 0:返回\n");
printf("請(qǐng)選擇:\n");
sel = getch();
while(sel<'0'||sel>'3'){
printf("輸入錯(cuò)誤,請(qǐng)重新選擇:\n");
sel = getch();
}
if(sel == '0')
return head;
if(!head){
printf("沒有任何學(xué)生信息!按任意鍵返回.\n");
getch();
return head;
}
if(sel == '1'){
head = del_all(head);
printf("刪除成功!按任意鍵返回.");
getch();
return head;
}
if(sel == '2'||sel =='3'){
head = del_one(head, sel);
return head;
}
}
void modify_student(STU *stu_head)
{
STU *head = stu_head;
STU *node_fd;
int sel;
char name[10];
unsigned long nb;
recyc3:
printf("1:修改指定學(xué)號(hào)的學(xué)生信息 2:修改指定姓名的學(xué)生信息 0:返回\n請(qǐng)選擇:\n");
sel = getch();
while(sel < '0'|| sel>'2'){
printf("輸入錯(cuò)誤!請(qǐng)重新選擇:\n");
sel = getch();
}
if(sel == '1'||sel=='2'){
if(sel == '1'){
printf("請(qǐng)輸入要修改的學(xué)生學(xué)號(hào):");
scanf("%d", &nb);
node_fd = search_by_nb(head, nb);
}
if(sel == '2'){
printf("請(qǐng)輸入要修改的學(xué)生姓名:");
scanf("%s", name);
node_fd = search_by_name(head, name);
}
if(node_fd){
printf("請(qǐng)輸入該學(xué)生英語成績(jī):");
scanf("%f", &node_fd->english);
while(node_fd->english < 0.0 || node_fd->english > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī):");
scanf("%f", &node_fd->english);
}
printf("請(qǐng)輸入該學(xué)生數(shù)學(xué)成績(jī):");
scanf("%f", &node_fd->math);
while(node_fd->math < 0.0 || node_fd->math > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī):");
scanf("%f", &node_fd->math);
}
printf("請(qǐng)輸入該學(xué)生語文成績(jī):");
scanf("%f", &node_fd->chinese);
while(node_fd->chinese < 0.0 || node_fd->chinese > 100.0){
printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī):");
scanf("%f", &node_fd->chinese);
}
node_fd->all_sub = node_fd->chinese+node_fd->math+node_fd->english;
node_fd->average = node_fd->all_sub/3;
printf("修改成功!\n");
goto recyc3;
}
else{
printf("沒有該學(xué)生信息!\n");
goto recyc3;
}
}
}
STU *display_student(STU *stu_head)
{
int sel;
STU *head = stu_head;
STU *node = stu_head;
if(node == NULL){
printf("沒有任何學(xué)生信息,按任意鍵返回");
getch();
return head;
}
recyc:
printf("學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英文 平均分 總分\n");
while(node){
printf("%d %s %0.1f %0.1f %0.1f %0.1f %0.1f\n", node->ID, node->name,\
node->chinese, node->math, node->english, node->average, node->all_sub);
node=node->next;
}
printf("排序方式: 1:按學(xué)號(hào)排序 2:按語文成績(jī)排序 3:按數(shù)學(xué)成績(jī)排序\n 4:按英文成績(jī)排序 5:按總分排序 0:返回\n請(qǐng)選擇:");
sel = getch();
while(sel < '0'|| sel>'5'){
printf("輸入錯(cuò)誤!請(qǐng)重新選擇:");
sel = getch();
}
if(sel == '0')
return head;
head = node = select_sort(head, sel);
system("cls");
goto recyc;
return head;
}
STU *search_by_name(STU *stu_head, char name[])
{
STU *node = stu_head;
if(!node)
return NULL;
while(node){
if(!strcmp(node->name, name))
return node;
node=node->next;
}
return NULL;
}
STU *search_by_nb(STU *stu_head, unsigned long nb)
{
STU *node = stu_head;
if(!node)
return NULL;
while(node){
if(node->ID == nb)
return node;
node=node->next;
}
return NULL;
}
void search_student(STU *stu_head)
{
STU *head = stu_head;
STU *node;
int sel = 0;
char name[10];
unsigned long ID;
recyc2:
printf("1:按姓名查找 2:按學(xué)號(hào)查找 0:返回\n請(qǐng)選擇:");
sel = getch();
while(sel<'0' || sel>'2'){
printf("\n輸入錯(cuò)誤,請(qǐng)重新選擇:");
sel = getch();
}
if(sel == '0')
return;
if(sel == '1'||sel=='2'){
if(sel == '1'){
printf("\n請(qǐng)輸入你要查找的學(xué)生姓名:");
scanf("%s", name);
node = search_by_name(head, name);
}
else{
printf("\n請(qǐng)輸入你要查找的學(xué)生學(xué)號(hào):");
scanf("%d", &ID);
node = search_by_nb(head, ID);
}
if(node){
printf("學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英文 平均分 總分\n");
printf("%d %s %0.1f %0.1f %0.1f %0.1f %0.1f\n", node->ID, node->name,\
node->chinese, node->math, node->english, node->average, node->all_sub);
goto recyc2;
}
else{
printf("沒有找到該學(xué)生信息!\n");
goto recyc2;
}
}
}5.store.c
這個(gè)文件包含程序啟動(dòng)時(shí)讀取文件內(nèi)的學(xué)生成績(jī)信息,
和需要保存時(shí)或者退出時(shí)向文件保存學(xué)生成績(jī)信息的操作。
#include <stdlib.h>
#include <stdio.h>
#include "students.h"
#define FILE_NAME "students"
void save_student(STU *stu_head)
{
STU *node = stu_head;
FILE *fp;
fp = fopen(FILE_NAME, "w+");
while(node){
fprintf(fp, "%ld %s %0.1f %0.1f %0.1f %0.1lf %0.1f\n", node->ID, node->name,\
node->chinese, node->math, node->english, node->all_sub, node->average);
node=node->next;
}
fclose(fp);
printf("保存成功!按任意鍵返回。\n");
getch();
}
STU *init_student(STU *stu_head)
{
STU *node = stu_head;
STU *head = stu_head;
STU *new_node;
int i;
FILE *fp;
char name[10];
int num;
ASK_STU(new_node);
new_node->next=NULL;
fp = fopen(FILE_NAME, "r+");
rewind(fp);
while((i = fscanf(fp, "%ld%s%f%f%f%lf%f\n", &new_node->ID, new_node->name,\
&new_node->chinese, &new_node->math, &new_node->english, &new_node->all_sub, &new_node->average)) == 7){
if(!head)
head = node = new_node;
else{
while(node->next)
node = node->next;
node->next = new_node;
}
ASK_STU(new_node);
new_node->next = NULL;
}
fclose(fp);
return head;
}以上是“C語言學(xué)生成績(jī)管理系統(tǒng)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文題目:C語言學(xué)生成績(jī)管理系統(tǒng)的示例分析
URL地址:http://www.yijiale78.com/article44/gjhehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、搜索引擎優(yōu)化、企業(yè)建站、網(wǎng)站改版、網(wǎng)站內(nèi)鏈、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)