1. 程式人生 > >學生資訊管理系統(課程設計)

學生資訊管理系統(課程設計)

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct student
{ 
  int id;  // 學號
  char name[30]; // 姓名
  char sex[2];  // 性別 
  float gread; // 成績
};
typedef struct student DataType; //  指定struct student為DataType
struct SeqList
{
 int MAX;     // 順序表中最大元素的個數
 int count;         // 存放線性表中元素的個數count <= MAXLENGTH
 DataType* element;  // element[0], element[1], ..., element[n - 1]存放線性表中的元素
};
typedef struct SeqList *MySeqList; 
// 初始化並建立空順序表
MySeqList initSeqList(int m);
// 判斷線性表是否為空
int isEmptySeqList(MySeqList mySeqList);
// 在順序表中求某元素的下標
int locateSeqList(MySeqList mySeqList, int id);
// 在順序表中修改值
int updateSeqList(MySeqList mySeqList, int id);
// 順序表的插入(元素p之前插入)
int insertPreSeqList(MySeqList mySeqList, int p, DataType x);
// 順序表的插入(元素p之後插入)
int insertNextSeqList(MySeqList mySeqList, int p, DataType x);
// 順序表的刪除(根據下標刪除)
int deleteSeqList(MySeqList mySeqList, int p);
// 順序表的刪除(根據元素值刪除)
int deleteSeqListByValue(MySeqList mySeqList, int id);
// 將順序表表示的線性表逆置
int reverseSeqList(MySeqList mySeqList);

int deleteAllVSeqList(MySeqList mySeqList, DataType x);
// 求出下標為i的元素的前驅和後繼
int findPrePostSeqList(MySeqList mySeqList, int i, DataType &m, DataType &n);
// 順序表實現部分:找出值為x的元素的前驅和後繼的儲存位置(即下標)
int locatePrePostSeqList(MySeqList mySeqList, DataType x, int &i, int &j);
// 輸出線性表的元素值
void printSeqList(MySeqList &mySeqList);
// 根據學生id,輸出線性表的元素值
void printSeqListById(MySeqList &mySeqList,int id);
// 在順序表中修改值

int updateSeqList(MySeqList mySeqList, int id)   //學生資訊登入
{
 int iRc = locateSeqList(mySeqList, id);
 if (iRc == -1)
 {
  printf("不存在指定下標!\n");
  return (0);
 }
 
 cout<<"學號   姓名   性別    成績 "<<endl;
 cin>>mySeqList->element[iRc].id>>mySeqList->element[iRc].name>>mySeqList->element[iRc].sex>>mySeqList->element[iRc].gread;
  return 1;
}
 
// 功能: 建立空順序表
MySeqList initSeqList(int m)
{
 MySeqList mySeqList = (MySeqList)malloc(sizeof(struct SeqList)); // 分配記憶體空間
 if (mySeqList != NULL)
 {
  mySeqList->element = (DataType*)malloc(sizeof(DataType) * m);   // 為裡面的元素分配m個DataType大小的記憶體空間,相當於初始化了一個長度為m的陣列
  if (mySeqList->element)
  {
   mySeqList->MAX = m;  // 如果建立了元素,MAXLENGTH為最大元素的個數
   mySeqList->count = 0;  // 空表長度為0
   return (mySeqList);
  }
  else
   free(mySeqList);        // 記得要手動釋放空間,否則很容易產生記憶體洩漏
 }
 printf("記憶體空間不足,請關閉一些程式,然後再試!\n"); // 儲存分配失敗,提示空間不足
 return NULL;
}
// 功能: 判斷線性表是否為空
int isEmptySeqList(MySeqList mySeqList)
{
 return (mySeqList->count ==0);
}
// 功能:在順序表中求某元素的下標,沒有查詢到,則返回-1
int locateSeqList(MySeqList mySeqList, int id)
{
 for (int i = 0; i < mySeqList->count; ++i)
  if (mySeqList->element[i].id == id)             // 傳入一個元素x,查詢到後返回下標i
   return (i);
 return (-1);
}
// 功能:順序表的pos下標前面插入,插入成功返回1,失敗返回0
int insertPreSeqList(MySeqList mySeqList, int pos, DataType x)
{
 ++mySeqList->count;
 if (mySeqList->count > mySeqList->MAX)      // 溢位
 {
  --mySeqList->count;    
  printf("表產生了溢位!\n");
  return (0);
 }
 if (pos < 0 || pos >= mySeqList->count)         // 不存在下標為pos的元素
 {
  --mySeqList->count;
  printf("不存在指定下標!\n");
  return (0);
 }
 for (int i = mySeqList->count - 1; i != pos; --i)
  {mySeqList->element[i] = mySeqList->element[i - 1]; // 插入位置及之後的元素均後移一個位置
 mySeqList->element[i] = x;                          // 插入元素x
 return (1);
 }
}
// 功能:順序表的pos下標後面插入,插入成功返回1,失敗返回0
int insertNextSeqList(MySeqList mySeqList, int pos, DataType x)
{
 if (pos < 0 || pos >= mySeqList->count)
 {
  printf("不存在指定下標!\n");
  return (0);
 }
 ++mySeqList->count;
 if (mySeqList->count >= mySeqList->MAX)
 {
  --mySeqList->count;
  printf("表產生了溢位!\n");
  return (0);
 }
 
 for (int i = mySeqList->count - 1; i != pos + 1; --i)
  {mySeqList->element[i] = mySeqList->element[i - 1];  // 同樣地,把pos+1插入位置及之後的元素均後移一個位置
 mySeqList->element[i] = x;                           // 插入元素x
 return (1);
 }
}
// 功能:順序表的刪除(根據下標刪除)
int deleteSeqList(MySeqList  mySeqList, int pos)
{
 if (pos < 0 || pos >= mySeqList->count)      // 不存在下標為pos的元素,注意下標範圍是從0到count-1
 {
  printf("不存在指定下標!\n");
  return (0);
 }
 
 for (int i = pos; i < mySeqList->count - 1; ++i)
  mySeqList->element[i] = mySeqList->element[i + 1];   // 被刪除元素之後的元素均前移一個位置
 --mySeqList->count;                                  // 元素個數減1
 return (1);
}
// 功能:根據元素值刪除,實現順序表的刪除
int deleteSeqListByValue(MySeqList mySeqList, int id)
{
 int pos = locateSeqList(mySeqList, id);
 if (pos == -1)
 {
  printf("不存在指定下標!\n");
  return (0);
 }
 deleteSeqList(mySeqList, pos);
 return (1);
}
 

int deleteAllSeqListByValue(MySeqList mySeqList, int x)
{
 if (mySeqList->count == 0)
 {
  printf("該表為空!\n");
  return (0);
 }
 for (int i = 0; i != mySeqList->count; ++i)
 {
 
  if (mySeqList->element[i].id == x )
  {  
      deleteSeqListByValue(mySeqList,x);             // 刪除x,刪除後要將下標減少1
      i--;
  }
 }
 return (1);
}


int deleteAllVSeqList(MySeqList mySeqList, int x)
{
 if (mySeqList->count == 0)
 {
  printf("該表為空!\n");
  return (0);
 }
 int p = 0, q = 0;
 while (mySeqList->element[p].id != x && p != mySeqList->count - 1)  // 跳過開始不是x的元素
 {
  ++p;
  ++q;
 }
 for (; p != mySeqList->count - 1; ++p)                            // 遍歷元素,不遍歷最後一個元素(為了防止越界)
 {
  while (mySeqList->element[p].id == x && p != mySeqList->count - 1) // 如果元素是x,則遊標p後移(用while處理多個x連續的情況)
  {
   ++p;
  }
  if (p != mySeqList->count - 1)
  {
   mySeqList->element[q] = mySeqList->element[p];
   ++q;
  }
 }
 if (mySeqList->element[mySeqList->count - 1].id != x)
 {
  mySeqList->element[q] = mySeqList->element[mySeqList->count - 1];
  ++q;
 }
 mySeqList->count = q;
 return (1);
}
 
// 功能:找出值為x的元素的前驅和後繼的儲存位置(即下標)
int locatePrePostSeqList(MySeqList mySeqList, int x, int &i, int &j)
{
 int k = locateSeqList(mySeqList, x);
 if (k == -1)
  return (0);
 if (k == 0)
  i = -1;
 else
  i = k - 1;
 if (k == mySeqList->count - 1)
  j = -1;
 else
  j = k + 1;
 return (1);
}
// 輸出線性表的元素值
void printSeqList(MySeqList &mySeqList)
{
 
 for (int i = 0; i < mySeqList->count; ++i)  // 輸出線性表的元素值
 {
   cout<< "學號:" << mySeqList->element[i].id << ",姓名:" << mySeqList->element[i].name << ",性別:" << mySeqList->element[i].sex ;
   cout<< "語文:" << mySeqList->element[i].gread;
   cout<<endl;
 }
 cout << endl;
}
// 根據學生id,輸出線性表的元素值
void printSeqListById(MySeqList &mySeqList,int id)
{
 for (int i = 0; i < mySeqList->count; ++i)  // 輸出線性表的元素值
 {
   if (id == mySeqList->element[i].id)
   {
     cout<< "學號:" << mySeqList->element[i].id << ",姓名:" << mySeqList->element[i].name << ",性別:" << mySeqList->element[i].sex ;
     cout<< "語文:" << mySeqList->element[i].gread;
     cout<<endl;
     break;
   }
 }
 
}


//主函式
int main(int argc, char* argv[])
{

MySeqList mySeqList = initSeqList(20); // 初始化一個長20的表
L:
   system("cls");
   cout<< "          ""--------歡迎使用學生成績管理系統---------""         "<<endl;
   cout<<endl;
   cout<< "1.新增學生資訊"<<endl;
   cout<<"2.查詢學生資訊"<<endl;
   cout<< "3.刪除學生資訊"<<endl;
   cout<<"4.修改學生資訊"<<endl;
   cout<< "5.退出學生系統"<<endl;
   int i;  
   cout<<"請選擇一個操作(1-5):";
   cin>>i;



   if (i == 1)
   {   
     mySeqList->count = 1;
  int iRc = 0;
  while(true&&mySeqList->count<20)
  {   
       cout<<endl<<"請新增學生資訊(輸入*退出新增):"<<endl; 
    cout<<"姓名:";   
   
    cin>>mySeqList->element[iRc].name;
          if (strcmp(mySeqList->element[iRc].name,"*") == 0)
    { 
     mySeqList->count--;  
     goto L;
    }
    cout<<"學號: ";
    cin>>mySeqList->element[iRc].id;
    cout<<"性別: ";
    cin>>mySeqList->element[iRc].sex;
       cout<<"成績: ";
    cin>>mySeqList->element[iRc].gread;  
         
    cout << "成功新增學生成績資訊成績。"<<endl;
          printSeqList(mySeqList);
          mySeqList->count++;
          iRc++;
  }    
   }



   else if (i == 2)
   {
L4:
       cout<<"請輸入要查詢的學生學號:"<<endl;
    int  sid;//學號
    cin>>sid;
    if (locateSeqList(mySeqList,sid) != -1)
    {
     cout<<"成功查詢學號為"<<sid<<"的學生成績。"<<endl;
           printSeqListById(mySeqList,sid);
    }
    else
    {
     cout<<"查詢學生成績錯誤,可能不存在學號為"<<sid<<"的學生."<<endl;
    }
    int iopselect;
    cout<<endl<<"還要繼續查詢嗎?(按0返回主選單,否則繼續此操作。)"<<endl;
    cin>>iopselect;
    if (iopselect == 0)
     goto L ;//返回主介面
    else
        goto L4;//重新查詢
  
   }



   else if (i == 3)
   {
L1:
       cout<<"請輸入要刪除的學生學號:"<<endl;
    int stu_id;
    cin>>stu_id;
   
       if (deleteSeqListByValue(mySeqList,stu_id) == 1)
         cout<<"成功刪除學生成績。"<<endl;
    else
   cout<<"刪除學生成績出錯。"<<endl;
    printSeqList(mySeqList);
    int iop;
    cout<<endl<<"還要繼續刪除嗎?(按0返回主選單,否則繼續此操作。)"<<endl;
    cin>>iop;
    if (iop == 0)
     goto L ;
    else
        goto L1;
   }




   else if (i == 4)
   {
L3:
    cout<<"請輸入要修改的學生學號:"<<endl;
       int id;
    cin>>id;
    if(updateSeqList(mySeqList,id) ==1)
         cout << "成功修改學生成績資訊成績。"<<endl;
    else
         cout << "修改學生成績資訊成績出錯。"<<endl;
       printSeqList(mySeqList);
    int iselect;
    cout<<endl<<"還要繼續修改嗎?(按0返回主選單,否則繼續此操作。)"<<endl;
    cin>>iselect;
    if (iselect == 0)
     goto L ;
    else
        goto L3;
   }
   else if (i == 5)
   {  
    system("cls");
    cout<<"您已經出本系統,感謝使用."<<endl;
   }
   
 return 0;
}
執行結果:
</pre><pre name="code" class="cpp">




相關推薦

學生資訊管理系統課程設計

/************************************************************************************************************************************** *

學生資訊管理系統(課程設計)

#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; struct studen

C語言學生成績資訊管理系統課程設計報告

C語言課程設計報告 一 .設計目的   學生成績管理系統  主要功能: (1)能按學期、按班級完成對學生成績的錄入、 修改,刪除 (2)能按班級統計學生的成績,求學生的總分及 平均分,並能根據學生的平均成績進行排序 (3)能查詢學生成績,不及格科目及學生名單

java學生資訊錄入系統課程設計報告

每個人做的不一樣,下面附上與此設計報告相匹配的程式碼,詳細可見 http://blog.csdn.net/qiaoermeng/article/details/79297626(注意類名,包名要一致,若有問題可留言解答,(^▽^)) 封面(各自要求不一樣)

學生資訊管理系統資料庫課程設計

一.概述 學生資訊管理系統是學校管理的重要工具,是學校不可或缺的一部分。隨著在校人數的不斷增加,教務系統的數量也不斷的上漲。學校工作繁雜,資料眾多,人工管理資訊的難度也越來越大,顯然是不能滿足實際的需要,效率也是很低的。並且這種傳統的方式存在著眾多的弊端,如:保密性差.查詢不便.效率低,很難維

資料結構課程設計——學生資訊管理系統

/*Copyright (c)2017,煙臺大學計算機與控制工程學院 *All rights reservrd. *作者:趙楷文 *完成時間:2017年12月20日 *版本號:v1.0 *問題描述:設計一個管理學生資訊的

課程設計---學生資訊管理系統

/* *煙臺大學計算機與控制工程學院 /* *Copyright (c) 2015,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:lulu.cpp *作者:蘆亞茹 *完成日期:2015年12月31日 *版本號:v1.o *

資料結構課程設計學生資訊管理系統

問題描述: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:aaaa.cbp * 作 者:張芸嘉 * 完成日期:2015年12月24日 * 版 本

資料結構課程設計-學生資訊管理系統

/* * 煙臺大學計算機與控制工程學院 *檔名稱:mian.cpp *作 者:王旭 *完成日期:2015年12月25日 *版 本 號:v1.0 *

課程設計————學生資訊管理系統(包含歷代思路和程式碼)

課程設計————學生管理系統(包含歷代思路和程式碼) 一.前言 學生資訊管理系統是我第一個獨立完成的比較長的程式碼,也算是花費了一些心血,這個系統是我一點點把它從幾百行的程式碼逐漸優化到上千行,功能從簡單到複雜。在這裡我把我的思路分享給大家,希望能給大家

C語言課程設計學生資訊管理系統

#include"stdio.h" //標準的輸入輸出函式檔案頭部說明 #include"math.h" // 數學函式頭部說明 #include"string.h" #include"stdlib.h" //通過該函式頭部裡的

C++課程設計學生資訊管理系統

課程設計內容 1.)學生資訊的錄入:錄入新的學生的資訊; 2.)學生資訊的新增:新增新的學生的資訊; 3.) 學生資訊的刪除:刪除不需要的學生的資訊。 4.)學生資訊的查詢:查詢你需要的學生的資訊。 5.)學生資訊的修改:修改錯誤的學生的資訊。 6.)學生資訊的顯示:顯示所

課程設計-學生資訊管理系統

#include <iostream> #include <stdio.h> #include <stdlib.h> #include<windows.h> #include<string.h> #include<string> #inc

課程設計——學生資訊管理系統(順序表 連結串列)

實驗目的 : 1 、掌握線性表的定義; 2 、掌握線性表的基本操作,如建立、查詢、插入和刪除等。 實驗內容: 定義一個包含學生資訊(學號,姓名,成績)的的 順序表和連結串列,使其具有如下功能: (1) 根據指定學生個數,逐個輸入學生資訊; (2) 逐個顯示學生表

資料結構課程設計學生資訊管理系統(煙大版)】

/* * Copyright (c) 2016, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:student.project * 作者:李瀟 * 完成日期:2016年12月28日 * 版本號:DEVC+

Java——Web開發之MVC設計模式的學生資訊管理系統(二)

為什麼這個標題為“(二)”,其實是對於上一個特別簡單學生資訊管理系統裡功能的完善。 所謂的“(一)”在這:學生資訊管理系統(一) 系統實現的功能: 實現新增學生 顯示查詢到的學生 刪除學生 更新學生資訊 模糊查詢符合相關資訊的學生

基於WEB的學生資訊管理系統,java畢業設計專案

**基於WEB的學生資訊管理系統,java畢業設計專案** 基於WEB的學生資訊管理系統mysql資料庫建立語句 基於WEB的學生資訊管理系統oracle資料庫建立語句 基於WEB的學生資訊管理系統sqlserver資料庫建立語句 基於WEB的學生資訊管理系統spr

學生資訊管理系統之第二篇主要功能模組設計和資料庫設計

 4.2系統主要功能模組設計: (1)基本資訊模組:是管理員對學生資訊進行新增操作。通過本介面管理員可以對學生資訊進行相應的修改,包括學號、姓名、出生日期等。可以通過該介面輸入學生姓名實現查詢該學生的所有資訊。管理員可以把學生的整條資訊進行刪除,同時也刪除學生的成績。

asp.net299學生成績管理系統-畢業設計

asp.net 學生 畢業設計 轉載於www.taobysj.com 作者 QQ 97095639 技術實現 開發語言:asp.net.框架:mvc.模式:B/S.數據庫:sqlserver.開發工具:vs,sqlserver.論文字數:1萬左右.

大一java圖書館管理系統課程設計

校招 seo mos rpv p2c pen tel abd deb 各位看看我編的代碼,為啥就不能動呢??? vs2017的使用 補《歡聚時代2017校招筆試題目(PHP工程師類)---錯題解析》 區間點覆蓋CaseofFugitive:CodeForces-556